2012-03-08 14 views
1

これは可能ですか?匿名のタイプを変更することはできますか?

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

このオブジェクトにプロパティを追加または追加することはできますか?それで後の段階で私はそれを作るために高さを加えることができた{ name = "name", age = 22, height = 1.9 };

リキャストする方法や新しい物件に追加する方法を探しているだけでなく、エレガントである必要はありません。

+0

.NET 4ですか?あなたは匿名のものではなくダイナミックなタイプが好きなように思えます。 – Marc

+0

var y = new {x.name、x.age、height = 1.9}; – Onots

+0

[add-properties-to-an-object-with-reflection-in-c]を参照してください(http://stackoverflow.com/questions/18312276/add-properties-to-an-object-with-reflection)。 -in-cqq = 1) – nawfal

答えて

4

いいえ、これは絶対にできません。匿名型は不変であり、そのプロパティの名前と型、および表示される順序によって正確に定義されます。新しいプロパティを追加するのは別のタイプです。

あなたは匿名型の中に行うことができる最高の異なる匿名型のインスタンスを作成することです:

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

name =age =が必要ではないことに注意してください。コンパイラはあなたのためにそれらを推測します)

実際には、dynamic、または.NET 4.0にない場合はDictionary<string, object>のようなプロパティバッグが欲しいようです。

はそれとも、もしかしたら、このような具体的なタイプ:

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

なおheightはNULLです。

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;