返回一个匿名类,该类将字段添加到命名类

时间:2016-05-19 09:14:21

标签: .net anonymous-class

我有一个返回类实例的方法。 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"   
        });
}

但这太丑了。

有什么好的解决方案吗?

1 个答案:

答案 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();
}