为什么Select(x => ... Cast <x.GetType()>())不起作用?

Tim*_*ann 5 c# linq select casting typeof

为什么以下代码会产生错误?

var listOfList = new List<List<string>>();
var tmp = listOfList.Select(x => x.OrderBy(y => y).Cast<x.GetType()>());
Run Code Online (Sandbox Code Playgroud)

错误:

运算符'<'不能应用于'方法组'和'System.Type'类型的操作数

代码看起来很愚蠢,因为它从我的真实例子中极度简化.我只是想知道为什么它不能正常工作.如果我替换x.getType()List<string>,它可以工作,但我现在不在运行时使用x的类型.
澄清一下:我没有必要寻找解决方案.我想知道我的代码到底出了什么问题.

Jon*_*ton 5

编写代码的正确方法是使用ToList而不是Cast其他地方提到的.

但是要回答"我的代码究竟出了什么问题?"这个问题.有两个具体要点:

  • 使用Cast<x.GetType()>():

泛型与编译时类型变量一起使用,因此在Cast<List<string>>()这里放置会更有意义 - x.GetType()只会在运行时解析.我猜你得到的实际信息是编译器在这一点上变得混乱的结果.

  • 试图投射到List<string>:

即使特定的强制转换代码语法合理,实际的强制转换仍然会失败.此时你正试图施放OrderedEnumerable<string>一个List<string>.这不是有效的演员表.将ToList()未解析的orderby语句解析为列表.