为什么以下代码会产生错误?
var listOfList = new List<List<string>>();
var tmp = listOfList.Select(x => x.OrderBy(y => y).Cast<x.GetType()>());
错误:
运营商'&lt;'不能应用于'方法组'和'System.Type'
类型的操作数
代码看起来很愚蠢,因为它从我的真实例子中极度简化。我只是想知道为什么它不能正常工作。如果我用x.getType()
替换List<string>
,它会起作用,但我现在不在运行时使用x的类型。
澄清一下:我没有必要寻找解决方案。我想知道我的代码到底出了什么问题。
答案 0 :(得分:5)
编写代码的正确方法是使用ToList
而不是其他地方提到的Cast
。
然而,要回答“我的代码到底出了什么问题?”这个问题。有两个具体要点:
Cast<x.GetType()>()
:泛型与编译时类型变量一起使用,因此将Cast<List<string>>()
放在这里会更有意义 - x.GetType()
只能在运行时解析。我猜你得到的实际信息是编译器在这一点上变得混乱的结果。
List<string>
:即使特定的强制转换语法合理,实际的强制转换仍然会失败。此时您正试图将OrderedEnumerable<string>
投射到List<string>
。这不是有效的演员表。 ToList()
将未解析的orderby语句解析为列表。
答案 1 :(得分:2)
为什么你需要这样做?我想你需要这个代码
var listOfList = new List<List<string>>();
var tmp = listOfList.Select(x => x.OrderBy(y => y).ToList());