是否可以改变匿名类型?

时间:2012-03-08 14:35:10

标签: c# anonymous-types

这可能吗?假设您有以下内容:

var x = new { name = "name", age = 22 };

是否可以在此对象中添加或附加属性?因此,在稍后阶段,我可以添加高度以使其{ name = "name", age = 22, height = 1.9 };

只需寻找重新制作或在新房产中添加的东西,就不必优雅。

3 个答案:

答案 0 :(得分:4)

不,这绝对不可能。匿名类型是不可变的,并且完全由其属性的名称和类型以及它们出现的顺序定义。添加新属性的类型不同。

您可以在匿名类型中执行的最佳操作是创建不同匿名类型的实例:

var y = new { name = x.name, age = x.age, height = 1.9 };

(请注意,name =age =不是必需的;编译器会为您推断它们。)

但实际上,如果您不在.NET 4.0中,您会想要dynamic或者像Dictionary<string, object>这样的属性包。

或许,也许,只是可能,这样的具体类型:

public class Person {
    public string Name { get; set; }
    public int Age { get; set; }
    public decimal? Height { get; set; }
}

请注意,height可以为空。

答案 1 :(得分:2)

为什么不创建一个新的匿名类型?

var x = new { name = "name", age = 22 };
var y = new { x.name, x.age, height = 1.9 };

答案 2 :(得分:1)

也许ExpandoObject可以使用?

dynamic x = new ExpandoObject();
x.name = "name";
x.age = "22";
x.height = 1.9;