2012-03-08 112 views
1

这可能吗?假设你有以下几点:是否可以更改匿名类型?

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

是否可以添加或追加属性到这个对象?所以在稍后阶段,我可以增加高度使其成为{ name = "name", age = 22, height = 1.9 };

它不一定要优雅,只是寻找一种方法来重铸或添加一个新的属性。

+0

你是.NET 4吗?听起来像你想要一个动态类型,而不是一个匿名的类型。 – Marc 2012-03-08 14:36:56

+0

var y = new {x.name,x.age,height = 1.9}; – Onots 2012-03-08 14:37:46

+0

可能想看到[add-properties-to-an-object-with-reflection-in-c](http://stackoverflow.com/questions/18312276/add-properties-to-an-object-with-reflection -in-C?LQ = 1) – nawfal 2014-06-28 18:23:15

回答

4

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

,你可以匿名类型中做的最好的就是创建一个不同匿名类型的实例:

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

(注意name =age =是不必要的;编译器会推断出他们为你)

但是实际上,您听起来像是要么dynamic,要么是像Dictionary<string, object>这样的财产包,如果您不在.NET 4.0中。

或者也许,只是也许,具体类型如下:

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

注意height为空。

2

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

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

也许ExpandoObject可能可用?

dynamic x = new ExpandoObject(); 
x.name = "name"; 
x.age = "22"; 
x.height = 1.9; 
相关问题