我有一个返回类实例的方法。 e.g。
Set-AzureRmVMOperatingSystem
在大多数情况下,这已经足够了,但我有一个案例,我需要在public User GetUser(int id) { return new User(); }
对象中添加另一个字段。如果不创建扩展此类的命名类,我该怎么做?
匿名课可以吗?也许是这样的:
User
从我看到的到现在为止,这是不可能的。 Id必须声明一个命名类或在匿名类中显式声明原始字段:
public object GetExtendedUser(int id)
{
return GetUser(id).extendsAnonymous(new {
avatar: "~/avatar/bird.png"
});
}
但这太丑了。
有什么好的解决方案吗?
答案 0 :(得分:0)
您可以使用DynamicObject
。如果将User对象更改为从DynamicObject继承并实现几个简单覆盖,则可以向对象添加属性。
class User : DynamicObject
{
Dictionary<string, object> properties = new Dictionary<string, object>();
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (properties.ContainsKey(binder.Name))
{
result = properties[binder.Name];
return true;
}
else
{
result = "Invalid Property!";
return false;
}
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
properties[binder.Name] = value;
return true;
}
}
public dynamic GetExtendedUser(int id)
{
dynamic user = new User();
user.ExtraProperty = "TADA!";
return user;
}
public void MyMethod()
{
dynamic user = GetExtendedUser(123);
Console.WriteLine(user.ExtraProperty);
Console.ReadLine();
}