设置匿名类型属性名称

时间:2011-05-18 12:14:54

标签: c# linq properties anonymous

假设我有以下代码:

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

基本上我希望匿名类型的 q 序列具有该属性 命名为其他名称,而不是 SomeConst 。 我怎样才能实现这样的行为?

2 个答案:

答案 0 :(得分:15)

你做不到。必须在编译时知道匿名类型的属性名称。为什么你需要这样做?

您可以通过创建一系列字典而不是匿名对象来实现类似的效果:

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

答案 1 :(得分:0)

我知道你的唯一方法是动态添加编译时名称未知的属性是ExpandoObject:

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

但我真的没有兴趣做这样的事情。这样做很可能是一个非常糟糕的设计/想法。毫无疑问,你会创建比你解决任何问题更尴尬,难以理解和不可维护的代码......