现实需求是:客户通过在TextBox中输入一串复杂的条件,来满足过滤条件。如果用后台硬编译,代码是: string content=string.Empty;
if (
content.Contains("") && content.Contains("")
&& (
(
(content.Contains("") || content.Contains("")) && content.Contains("")
)
||
(
(content.Contains("") || content.Contains("")) && content.Contains("")
)
||
(
(content.Contains("") && content.Contains("")) || content.Contains("")
)
&&
(
(content.Contains("") || content.Contains("")) && content.Contains("")
)
))
{
//dosomething ;
}由于“”的内容需要客户通过在UI界面中输入,不能硬编译,所以我想让用户自己输入C#表达式,但问题是传入的string不能像硬编一样编译,编译器只能把它们认为是字串,而不能是C#中的语法关键字。请问如何解决?谢谢大家
if (
content.Contains("") && content.Contains("")
&& (
(
(content.Contains("") || content.Contains("")) && content.Contains("")
)
||
(
(content.Contains("") || content.Contains("")) && content.Contains("")
)
||
(
(content.Contains("") && content.Contains("")) || content.Contains("")
)
&&
(
(content.Contains("") || content.Contains("")) && content.Contains("")
)
))
{
//dosomething ;
}由于“”的内容需要客户通过在UI界面中输入,不能硬编译,所以我想让用户自己输入C#表达式,但问题是传入的string不能像硬编一样编译,编译器只能把它们认为是字串,而不能是C#中的语法关键字。请问如何解决?谢谢大家
解决方案 »
- [分享]把程序锁定到Win7任务栏
- new StreamWriter("c:\aaaaa.txt") 路径中具有非法字符
- 5年没有用c#,全都忘了,问一个弱智的水晶报表问题!
- C#代码修改
- Listview中如何绑定数据库中的数据?
- Application.Run() 和 System.Windows.Forms.Form.ShowDialog() 方法的区别
- 存储过程在C# 里面实现保护工作怎么做???
- 初级的windows.form问题
- 再问一下一个lock的问题。
- vs7安装问题:出错,help!!
- vs 2010 代码编辑器无法正常显示中文,求解
- 有一个20G的文本文件存在DB的表中,用C#如何将它分成10M左右的不断行的文件并下载到本地?
//dosomething ;
}
的功能,但是TextBox.text是字符,不能运符出true or false
C#的动态编译,计算表达式的结果
/// <summary>
/// 采用动态编译,计算表达式的结果
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button6_Click(object sender, EventArgs e)
{
// 声明要计算C#代码,要求必须完整的C#代码
string strCode = @"
using System;
namespace ParseEx
{
public class ParseExC
{
public static double GetValue()
{
return 1+5*8-(Math.Sin(12)*2.5);
}
}
}"; CodeDomProvider comp = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters(); StringBuilder codeBuilder = new StringBuilder();
codeBuilder.AppendLine(strCode); cp.ReferencedAssemblies.Add("System.dll");
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
CompilerResults cr = comp.CompileAssemblyFromSource(cp, codeBuilder.ToString());
if (cr.Errors.HasErrors)
{
MessageBox.Show("Error!");
}
else
{
Assembly a = cr.CompiledAssembly;
if (a != null)
{
Type t = a.GetType("ParseEx.ParseExC");
if (t != null)
{
// 因为是静态调用,不需要创建实例了
// object mode = a.CreateInstance("Mode");
MethodInfo mi = t.GetMethod("GetValue", BindingFlags.Static | BindingFlags.Public);
if (mi != null)
{
double d = (double)mi.Invoke(null, null);
MessageBox.Show(d.ToString());
}
}
}
}
}