假设我有以下代码:
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
{
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 }
});
我所知道的唯一动态添加属性名称在编译时未知的方法是使用ExpandoObject:
var q = persons.Select(p => { dynamic obj = new ExpandoObject(); obj.Name = p.Name; return obj; });
但我真的不认为有任何兴趣去做这样的事情。这很可能是一个非常糟糕的设计/想法。你肯定会创造出更多笨拙、难以阅读和难以维护的代码,而不是解决任何问题...
SomeConst
的位置使用OtherName
呢? - SWeko