Я тестировал некоторые новые вещи в VS 2010 и C # 4.0, и немного старался, чтобы увидеть его границы, и пока мне нравится то, что я вижу, но одна вещь меня немного раздражен ...
Учитывая следующие два простых класса, есть ли какой-нибудь способ (кроме прямого вызова TryGetMember
), чтобы избежать приведения к dynamic
? Возможно, какой-то магический атрибут, который можно установить на Test
?
class DynamicPropertyObject : DynamicObject
{
private Dictionary<string, object> _properties = new Dictionary<string, object>();
public override IEnumerable<string> GetDynamicMemberNames()
{
foreach (string s in _properties.Keys)
yield return s;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
_properties[binder.Name] = value;
return true;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = null;
if (!_properties.ContainsKey(binder.Name))
return false;
result = _properties[binder.Name];
return true;
}
}
class Test : DynamicPropertyObject
{
public Test()
{
((dynamic)this).Foo = "test";
}
}