Установка имени свойства анонимного типа - PullRequest
20 голосов
/ 18 мая 2011

Допустим, у меня есть следующий фрагмент кода:

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

В основном, я бы ожидал иметь в q последовательность анонимного типа со свойством с именем OtherName , а не SomeConst . Как мне добиться такого поведения?

Ответы [ 2 ]

16 голосов
/ 18 мая 2011

Вы не можете этого сделать.Имена свойств анонимного типа должны быть известны во время компиляции.Почему именно это нужно сделать?

Вы можете добиться аналогичного эффекта, создав последовательность словарей вместо анонимных объектов:

string SomeConst = "OtherName";
var persons = GetPersons(); //returns list of Person
var q = persons.Select(p => 
new Dictionary<string, string>
{
    { SomeConst, p.Name }
});
0 голосов
/ 18 мая 2011

Единственный способ, которым я знаю, что вы можете динамически добавлять свойства, имя которых неизвестно во время компиляции, - это ExpandoObject:

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

Но я действительно не вижу никакого интереса в подобных вещах.,Скорее всего, это очень плохой дизайн / идея сделать это.Вы, несомненно, создадите более неуклюжий, нечитаемый и не поддерживаемый код, чем что-либо решаете ...

...