为什么Select(x =>..Cast())不工作
本文关键字:Select 工作 GetType 为什么 Cast | 更新日期: 2023-09-27 18:01:27
为什么下面的代码会产生一个错误?
var listOfList = new List<List<string>>();
var tmp = listOfList.Select(x => x.OrderBy(y => y).Cast<x.GetType()>());
错误:操作符'<'不能应用于'method group'和'System '类型的操作数。类型的
代码看起来很傻,因为它与我的实际示例相比非常简化。我只是想知道为什么它不起作用。如果我将x.getType()
替换为List<string>
,它可以工作,但我现在不知道运行时x的类型。
澄清一下:我不需要寻找解决方案。我想知道我的代码到底出了什么问题。
正确的代码编写方法是使用ToList
而不是其他地方提到的Cast
。
然而,要回答"我的代码到底出了什么问题?"这个问题,有两个具体的点可以开始:
- 使用
Cast<x.GetType()>()
:
泛型用于编译时类型变量,所以把Cast<List<string>>()
放在这里会更有意义——x.GetType()
只在运行时解析。我猜你得到的实际消息是编译器在这一点上混淆的结果。
- 尝试转换到
List<string>
:
即使特定的强制转换代码语法是合理的,实际的强制转换仍然会失败。此时,您正在尝试将OrderedEnumerable<string>
转换为List<string>
。这不是一个有效的类型转换。ToList()
将未解析的order语句解析为一个列表。
为什么要这样做?我猜你需要这个代码
var listOfList = new List<List<string>>();
var tmp = listOfList.Select(x => x.OrderBy(y => y).ToList());