.net DynamicObject实现,为缺少的属性而不是RunTimeBinderException返回null

我希望能够做类似以下的事情:

dynamic a = new ExpandoObject(); Console.WriteLine(a.SomeProperty ?? "No such member"); 

但那扔了

 RunTimeBinderException: 'System.Dynamic.ExpandoObject' does not contain a definition for 'Throw' 

您是否知道DynamicObject的实现会为缺少的定义返回null,或者有关如何创建一个的教程? 非常感谢!

像这样的东西?

 using System; using System.Collections.Generic; using System.Dynamic; public class NullingExpandoObject : DynamicObject { private readonly Dictionary values = new Dictionary(); public override bool TryGetMember(GetMemberBinder binder, out object result) { // We don't care about the return value... values.TryGetValue(binder.Name, out result); return true; } public override bool TrySetMember(SetMemberBinder binder, object value) { values[binder.Name] = value; return true; } } class Test { static void Main() { dynamic x = new NullingExpandoObject(); x.Foo = "Hello"; Console.WriteLine(x.Foo ?? "Default"); // Prints Hello Console.WriteLine(x.Bar ?? "Default"); // Prints Default } } 

我希望真正的ExpandoObject比这更复杂,但如果这就是你需要的……