C# 使用linq按枚举填充类实例
我有一个通用的C# 使用linq按枚举填充类实例,c#,.net,linq,enums,generic-list,C#,.net,Linq,Enums,Generic List,我有一个通用的列表PersonList,其中包含个人信息 class Person { public string name {get ; set;} public string lastName {get ; set;} public decimal income {get ; set;} } 我有一个方法可以返回收入 decimal GetPersonIncome(string name) 我有包含要筛选的名称的枚举: enum Sortedname
列表PersonList
,其中包含个人信息
class Person
{
public string name {get ; set;}
public string lastName {get ; set;}
public decimal income {get ; set;}
}
我有一个方法可以返回收入
decimal GetPersonIncome(string name)
我有包含要筛选的名称的枚举:
enum SortednamesA
{
george,
jack,
etc
}
enum SortednamesB
{
bill,
john,
etc
}
我想基于每个枚举的名称创建sortedPersonIncome
实例
Class SortedPersonsIncome
{
public SortedPerdons(string customListname,
decimal sortedPersonIncomeA,
decimal sortedPersonIncomeB)
}
所以它会是这样的:
SortedPersonsIncome sortedA = new SortedPersonsIncome(
"newSortedPerson",
GetPersonIncome(georgeFromEnumA),
GetPersonIncome(jackFromEnumA))
我希望使用linq或foreach循环以最少的努力来实现这一点。
最好的方法是什么
谢谢 您可以按枚举中的名称筛选
个人列表
var a = PersonList.Where(x=> Enum.GetNames(typeof(SortednamesA)).Contains(x.name))
Enum.GetNames
将为您提供在枚举中定义的名称
Enum.GetNames(typeof(SortednamesA)
将为您提供以下数组[“george”、“jack”、“etc”]
您可以在枚举中按名称筛选个人列表
var a = PersonList.Where(x=> Enum.GetNames(typeof(SortednamesA)).Contains(x.name))
Enum.GetNames
将为您提供在枚举中定义的名称
Enum.GetNames(typeof(SortednamesA)
将为您提供以下数组[“george”、“jack”、“etc”]
我尝试了使用嵌套if的foreach。我也尝试了从linq和where使用foreach,但我对linq是新手,我找不到解决方案。将其添加到问题中,为什么不仅仅是SortedPersonsIncome SortedDA=new SortedPersonsIncome(“newSortedPerson”),GetPersonInome(SortednamesA.george.ToString()),GetPersonInome(SortednamesA.jack.ToString())
我使用枚举,因为我使用特定的名称,不想输入任何其他名称。我使用嵌套的if尝试foreach。我也尝试从linq和何处使用foreach,但我是linq的新手,我找不到解决方案将其添加到问题中为什么不只是SortedPersonIncome SortedDA=new SortedPersonIncome(“newSortedPerson”、GetPersonInCode(SortednamesA.george.ToString())、GetPersonInCode(SortednamesA.jack.ToString()))
我使用枚举,因为我使用特定的名称,不希望任何其他名称作为输入。非常好,非常优雅。谢谢。虽然是一个微优化,但这将为枚举的每次迭代冗余调用Enum.GetNames
。您可以将其作为语句放在LINQ查询之前,以保存开销,非常好,非常优雅。谢谢虽然这是一个微优化,但对于枚举表的每次迭代,都会冗余调用Enum.GetNames
。您可以将其作为语句放在LINQ查询之前,以节省开销