public void Test(string str)
{
   //...
   ClassA a = new ClassA();
   if(a.str == "Yes")
   //...}
上面的代码中的a.str,我的原意是说,假设接收到str参数为"Name",则表达式是a.Name == "Yes"
怎么样实现啊?当然还有可能需要把传入的参数作为表达式中的任一一部分,比如方法名等.就是类似于javascript中的eval()函数,在C#中如何实现啊?

解决方案 »

  1.   

    现成的Eval是不可能,C#是编译语言,给你三条路选:
    1、嵌入脚本语言,比如JavaScript或IronPython;
    2、自己调用.net的C#编译器功能动态生成;
    3、把代码分解成几种固定的形式,用函数或委托调用。
      

  2.   

    public void Test(string str)
    {
       ClassA a = new ClassA();
    if (str=="Name"){
    a.Name == "Yes"
    }
    .............
    if (str=="xx"){
    a.xx == "Yes"
    }
    ........
    不知道,只知道这个笨方法呵呵
    不过Name,xx都事先必须确定存在,而且都定义了方法
    ........
    }
      

  3.   

    可以通过反射来实现。例如:
    public void Test(string str)
    {
       //...
       //ClassA a = new ClassA();
       Type t = typeof (ClassA)
       object result = t.InvokeMember (str, BindingFlags.GetField, null, null, new object [] {});   if(rusult.ToString()== "Yes")
       //...}
    如果是方法名,只要把BindingFlags.GetField改为BindingFlags.InvokeMethod就行了。
    另外你可以参考
    http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemtypeclassinvokemembertopic.asp