如题,例如:页面有2个条件控件,ID1,ID2, C#代码如下:
if((ID1.Value==1 || ID2.Value==2) && ID2.Value==2)
{
//do_something
} if后面的条件是直接从数据库中取出的内容,在代码里如何直接用。 例如: string condition="(ID1.Value==1 || ID2.Value==2) && ID2.Value==2";
if(方法(condition))
{
//do_something
} 这种方法如何实现呢?请高手帮忙
if((ID1.Value==1 || ID2.Value==2) && ID2.Value==2)
{
//do_something
} if后面的条件是直接从数据库中取出的内容,在代码里如何直接用。 例如: string condition="(ID1.Value==1 || ID2.Value==2) && ID2.Value==2";
if(方法(condition))
{
//do_something
} 这种方法如何实现呢?请高手帮忙
{
...//数据库检索是否存在该用户名,从略
int count=Convert.ToInt(cmd.ExecuteScalar());
if(count>0){return true;}
return true;
}
if(CheckUserExists(x))//x是你从控件或其他渠道取到的数据或用户输入的数据
{
//条件若成立 执行你想要执行的下续工作
}
其他的条件判断应该是代码里的事情.不过Anders Hejlsberg在PDC2008 Show过使用CSharpEvaluator动态解析并执行C#代码,只可惜到.Net4.0出来的时候这个class又不见踪影了
object obj = ExecuteCode("1 == 2");
if (obj == null)
ret = "返回了null";
else
ret = obj.ToString();//Convert.ToString( #region 执行静态代码
/// <summary>
/// 执行代码,返回结果(默认引用了System.dll、System.Data.dll、System.Xml.dll、System.Web.dll 4个程序集)
/// </summary>
/// <param name="code">代码</param>
/// <param name="arrReferencedAssemblies">要引用的程序集</param>
/// <returns></returns>
public static object ExecuteCode(string code, string[] arrReferencedAssemblies)
{
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider(); CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("System.dll"); //引用dll
objCompilerParameters.ReferencedAssemblies.Add("System.Data.dll"); //引用dll
objCompilerParameters.ReferencedAssemblies.Add("System.Xml.dll"); //引用dll
objCompilerParameters.ReferencedAssemblies.Add("System.Web.dll"); //引用dll
if (arrReferencedAssemblies != null)
foreach (string item in arrReferencedAssemblies)
objCompilerParameters.ReferencedAssemblies.Add(item);
objCompilerParameters.GenerateExecutable = false;
objCompilerParameters.GenerateInMemory = true; CompilerResults cr = (objCSharpCodePrivoder.CompileAssemblyFromSource(objCompilerParameters,
new [] { GenerateCode(code) })); if (cr.Errors.HasErrors)
{
StringBuilder l_err = new StringBuilder("编译错误:");
foreach (CompilerError err in cr.Errors)
{
l_err.AppendLine(err.ErrorText);
}
return l_err.ToString();
}
// 通过反射,调用HelloWorld的实例
Assembly objAssembly = cr.CompiledAssembly;
object objHelloWorld = objAssembly.CreateInstance("CommonOtherDynamicCodeGenerate.CommonOtherDynamicCodeGenerateClass");
MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");
// 调用执行
return objMI.Invoke(objHelloWorld, null);
} /// <summary>
/// 执行代码,返回结果(默认引用了System.dll、System.Data.dll、System.Xml.dll 3个程序集)
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public static object ExecuteCode(string code)
{
return ExecuteCode(code, null);
} private static string GenerateCode(string code)
{
StringBuilder sb = new StringBuilder();
sb.Append("using System;");
sb.Append(Environment.NewLine);
sb.Append("using System.Text;");
sb.Append(Environment.NewLine);
sb.Append("using System.IO;");
sb.Append(Environment.NewLine);
sb.Append("using System.Data;");
sb.Append(Environment.NewLine);
sb.Append("using System.Xml;");
sb.Append(Environment.NewLine);
sb.Append("using System.Web;");
sb.Append(Environment.NewLine);
sb.Append("using System.Collections;");
sb.Append(Environment.NewLine);
sb.Append("using System.Collections.Generic;");
sb.Append(Environment.NewLine);
sb.Append("namespace CommonOtherDynamicCodeGenerate");
sb.Append(Environment.NewLine);
sb.Append("{");
sb.Append(Environment.NewLine);
sb.Append(" public class CommonOtherDynamicCodeGenerateClass");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" public object OutPut()");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" return " + code + ";");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append("}"); return sb.ToString();
}
#endregion
从数据库取出的条件,却和要求引用当前Page实例里的控件这确实,需求很不合理
//do something??
}
http://topic.csdn.net/u/20090531/21/8a99954c-c6ab-4a61-8356-071fbb020efa.html
很好用啊,用JScript语法,哈哈,和C#差不多,强烈推荐。object o= Evaluator.EvalToObject("1==2");
MessageBox.Show(o.ToString());