设置匿名类型属性名称

本文关键字:属性 类型 设置 | 更新日期: 2023-09-27 17:57:04

假设我有以下一段代码:

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<string, string>
{
    { SomeConst, p.Name }
});

我知道您可以动态添加编译时名称未知的属性的唯一方法是 扩展对象 :

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

但我真的看不出做这样的事情有任何兴趣。这样做很可能是一个非常糟糕的设计/想法。毫无疑问,您将创建比解决任何事情更笨拙、不可读和无法维护的代码......