Определение имени свойства анонимного типа

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

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

В принципе, я ожидаю, что в последовательности q анонимного типа с свойством named ДругоеName, а не SomeConst. Как я могу достичь такого поведения?

Ответы

Ответ 1

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

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

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

Ответ 2

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

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

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