设置匿名类型属性名称

假设我有以下代码:

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

基本上我希望在q序列中使用名为OtherName而不是SomeConst的匿名类型。 我怎样才能实现这样的行为?

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

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

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

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

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

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