gpt4 book ai didi

c# - 无法将 System.Collections.Generic List 转换为 T

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:27 26 4
gpt4 key购买 nike

我有一个字典,其值是一个列表。我需要阅读每个列表来提取一个字段。但是在foreach循环中出现如下错误

cannot convert type System.Collections.Generic.List<UserQuery.Employee> to UserQuery.Employee

如果我在 var iValue 的注释行中使用 firstorDefault,它就会起作用。但是我将有多个记录来检查我正在阅读的字典(尽管在这个例子中,我硬编码 1,以测试我的代码)。

void Main()
{
var svalue =1;
List<Employee> emplist = new List<Employee>()
{
new Employee{ EID=10, Ename="John"},
new Employee{ EID=11, Ename="Adam"},
new Employee{ EID=12, Ename="Ram"}
};
List<Employee> emplist1 = new List<Employee>()
{
new Employee{ EID=1, Ename="Jo"},
new Employee{ EID=1, Ename="Ad"},
new Employee{ EID=1, Ename="Ra"}
};

var dict1 = new Dictionary<int, List<Employee>>();
dict1.Add(1, emplist);
dict1.Add(2, emplist1);

//var ivalue = dict1.FirstOrDefault(x => x.Key == svalue).Value.ToList();
var ivalue = dict1.Where(kvp => dict1.ContainsKey(1)).Select(x => x.Value);

Console.WriteLine(ivalue);
foreach (Employee emp in ivalue)
{
Console.WriteLine(emp.EID);
}
}

class Employee
{
public int EID { get; set;}
public string Ename {get; set;}
}

最佳答案

您当前的代码

 var ivalue = dict1
.Where(kvp => dict1.ContainsKey(1)) //TODO: Very strange condition: check it
.Select(x => x.Value);

返回 IEnumerable<List<Employee>>结果 ( ivalue )。既然你想要 IEnumerable<Employee>只是,您必须展平结果:

 var ivalue = dict1
.Where(kvp => dict1.ContainsKey(1))
.SelectMany(kvp => kvp.Value); // kvp: we still have key-value pair

然而,这不是我们处理字典的方式;您可能正在寻找这样的东西(让我们保留一些 Linq:- .Select(emp => emp.EID) ):

 if (dict1.TryGetValue(1, out var ivalue)) // do we have corresponding value?
Console.WriteLine(String.Join(Environment.NewLine, ivalue // if yes, print them out
.Select(emp => emp.EID)));

关于c# - 无法将 System.Collections.Generic List<T> 转换为 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48131651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com