[C# 4.0] 2. Dynamic (2)
2010-09-30 21:04:19 来源:WEB开发网输出:
123
Hello, World!
A=123
Y=abc
由于 DynamicObject 默认没有实现操作,因此在上面例子中我们得自己折腾。
public class DynamicObject : IDynamicMetaObjectProvider
{
public virtual bool TryGetMember(GetMemberBinder binder, out object result)
{
result = null;
return false;
}
... ...
}
当然,如果嫌麻烦,可以考虑用下面这种方式。
dynamic o = new ExpandoObject();
o.Test = new Func<int, string, string>((a, y) => String.Format("A={0}\r\nY={1}", a, y));
o.X = 123;
o.Y = "Hello, World!";
var s = o.Test(123, "abc");
Console.WriteLine(o.X);
Console.WriteLine(o.Y);
Console.WriteLine(s);
和 JavaScript、Python 之类的动态语言很像吧。我们还可以对其成员进行增删和遍历操作,还记得 Python 中的 dir() 吧。
dynamic o = new ExpandoObject();
o.Test = new Func<int, string, string>((a, y) => String.Format("A={0}\r\nY={1}", a, y));
o.X = 123;
o.Y = "Hello, World!";
// 遍历成员
var dict = o as IDictionary<string, object>;
Console.WriteLine(String.Join(", ", dict.Keys));
// 移除成员
dict.Remove("Y");
try
{
Console.WriteLine(o.Y);
}
catch (RuntimeBinderException ex)
{
Console.WriteLine(ex.Message);
}
更多精彩
赞助商链接