是否将可枚举项复制到列表";无法隐式转换类型';MyClass.Items';到';Syste
本文关键字:转换 类型 Syste MyClass Items 复制 枚举 列表 是否 quot | 更新日期: 2023-09-27 18:20:14
这是一个noob问题。所以,如果我错报了这个问题,那是因为我没有完全理解正在发生的事情。
问题
编译错误:无法将类型"MyClass.Items"隐式转换为"System.Collections.Generic.List"
上下文
我正在通过IOrderedEnumerable
迭代List
,但我无法返回所需的记录,因为它的类型是List
(因为我的整个应用程序都在来回传递List
对象)。
我对该方法的输入是List
,但当我使用OrderBy
选项时,它似乎隐式转换为IEnumerable
。
我已经阅读了我所发现的一切,但这一切似乎都归结为:
// ToList is not available!
return SingleItemToCheck.ToList;
或
// same type conversion error
List<Items> ReturningList = SingleItemToCheck;
问题代码
public static List<Items> FindCheapestItem(List<Items> source)
{
// Now we pop only the first one.
// ISSUE: Sometimes the top entry on the list is bad,
// so we need to check it!
var BestItemCandidate = source.OrderBy(s => s.ItemDesirability);
bool ForgetThisOne = false;
foreach (var SingleItemToCheck in BestItemCandidate)
{
ForgetThisOne = false;
// ... test for ItemDesirability, truncated
if (Desirability < 0)
{
ForgetThisOne = true;
}
if (!ForgetThisOne)
{
// we are just returning the first desirable row
// because we are sorted on desirability
// and consuming code can only digest a single item.
return SingleItemToCheck; // !!! ARGH, compile error !!!
}
}
// means we looped through everything and found nothing of interest
return null;
}
SingleItemToCheck
是单个项目,而不是列表。它没有可用的ToList()
方法。只需用单个项目创建一个列表。
return new List<Items> { SingleItemToCheck };
或者,如果您只对这一项感兴趣,请将方法的返回类型更改为简单的Items
,并完全省略列表。
另一种编写方法,特别是当您只对一个项目感兴趣时,是简单地将内部循环逻辑重构为一个函数,然后编写一个查询
return source
.OrderBy(s => s.ItemDesirability)
.Where(s => IsDesirable(s)) // refactored loop logic, returning boolean
.FirstOrDefault(); // first desirable item, or null
否则,如果你绝对需要一个列表,但其中只有一个项目,请考虑
var list = source
.OrderBy(s => s.ItemDesirability)
.Where(s => IsDesirable(s))
.Take(1)
.ToList();
如果没有元素通过,这将是一个空列表。然后,您可以像现在的代码一样选择返回null,或者返回空列表并让调用方处理它,而不是null结果。