Определение имени свойства анонимного типа
Скажем, у меня есть следующий фрагмент кода:
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; });
Но я действительно не вижу никакого интереса к такому делу. Это, скорее всего, очень плохой дизайн/идея. Вы, несомненно, создадите более неудобный, нечитаемый и непостижимый код, чем вы решите что-нибудь...