这可能吗?假设你有以下几点:是否可以更改匿名类型?
var x = new { name = "name", age = 22 };
是否可以添加或追加属性到这个对象?所以在稍后阶段,我可以增加高度使其成为{ name = "name", age = 22, height = 1.9 };
。
它不一定要优雅,只是寻找一种方法来重铸或添加一个新的属性。
这可能吗?假设你有以下几点:是否可以更改匿名类型?
var x = new { name = "name", age = 22 };
是否可以添加或追加属性到这个对象?所以在稍后阶段,我可以增加高度使其成为{ name = "name", age = 22, height = 1.9 };
。
它不一定要优雅,只是寻找一种方法来重铸或添加一个新的属性。
不,这是绝对不可能的。匿名类型是不可变的,并且由其属性的名称和类型以及它们出现的顺序完全定义。添加一个新的属性是一个不同的类型。
,你可以匿名类型中做的最好的就是创建一个不同匿名类型的实例:
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
为空。
为什么不只是创建一个新的匿名类型?
var x = new { name = "name", age = 22 };
var y = new { x.name, x.age, height = 1.9 };
也许ExpandoObject可能可用?
dynamic x = new ExpandoObject();
x.name = "name";
x.age = "22";
x.height = 1.9;
你是.NET 4吗?听起来像你想要一个动态类型,而不是一个匿名的类型。 – Marc 2012-03-08 14:36:56
var y = new {x.name,x.age,height = 1.9}; – Onots 2012-03-08 14:37:46
可能想看到[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