代码之家  ›  专栏  ›  技术社区  ›  Micah

向Expandoobjects添加方法

  •  5
  • Micah  · 技术社区  · 14 年前

    更新

    问题不在于代码,而在于您显然无法从即时窗口评估动态对象。


    我试图将方法附加到Expandoobject,但不确定如何使其工作。这是我的代码:

    dynamic myObj = new ExpandoObject();
    myObj.First = "Micah";
    myObj.Last = "Martin";
    myObj.AsString = new Func<string>(() => myObj.First + " " + myObj.Last);
    
    //No matter what I do I get 'object' does not contain a definition for 'AsString'
    myObj.AsString;
    myObj.AsString();
    myObj.AsString.Invoke();
    

    有人知道怎么做吗?

    2 回复  |  直到 14 年前
        1
  •  9
  •   Justin Niessner    14 年前

    你确定你包含了所有的代码吗?

    我刚刚测试并运行了以下各项,并取得了成功:

    dynamic obj = new ExpandoObject();
    
    obj.First = "Hello";
    obj.Last = "World!";
    
    obj.AsString = new Func<string>(() => obj.First + " " + obj.Last);
    
    // Displays "Hello World!"
    Console.WriteLine(obj.AsString());
    
        2
  •  0
  •   Anthony Pegram    14 年前

    编译器会抱怨

    myObj.AsString; // only assignment, call, increment, decrement, and new object expressions can be used as a statement
    

    所以把它扔掉。当然,去掉你所说的不编译的代码行。但是,一旦这些位被修复,其余的代码就可以工作了。示例(加上添加另一个“方法”):

    dynamic myObj = new ExpandoObject();
    myObj.First = "Stack";
    myObj.Last = "Overflow";
    
    Action<int> PrintInt = input => Console.WriteLine(input.ToString());
    myObj.PrintInt = PrintInt;
    myObj.PrintInt(1);
    
    myObj.AsString = new Func<string>(() => myObj.First + " " + myObj.Last);
    string s = myObj.AsString();
    Console.WriteLine(s);