web-dev-qa-db-ja.com

匿名型プロパティ名の設定

次のコードがあるとしましょう。

string SomeConst = "OtherName";
var persons = GetPersons(); //returns list of Person
var q = persons.Select(p => 
new
{
    SomeConst = p.Name
});

基本的に、qには、SomeConstではなくOtherNameという名前のプロパティを持つ匿名型のシーケンスがあると思います。どうすればそのような動作を実現できますか?

24
user759141

あなたはそれをすることはできません。匿名型のプロパティの名前は、コンパイル時に認識されている必要があります。なぜあなたはそれをする必要があるのですか?

匿名オブジェクトの代わりに一連の辞書を作成することで、同様の効果を得ることができます。

string SomeConst = "OtherName";
var persons = GetPersons(); //returns list of Person
var q = persons.Select(p => 
new Dictionary<string, string>
{
    { SomeConst, p.Name }
});
18
Thomas Levesque

コンパイル時に名前が不明なプロパティを動的に追加できる唯一の方法は、ExpandoObjectです。

var q = persons.Select(p => { dynamic obj = new ExpandoObject(); obj.Name = p.Name; return obj; });

しかし、私は本当にそのようなことをすることに興味を持っていません。そうすることはおそらく非常に悪い設計/アイデアです。間違いなく、何も解決するよりも厄介で、読みにくく、保守できないコードを作成することになります...

0
Ssithra