为什么.Equals在这个LINQ示例中不起作用?

Edw*_*uay 4 c# linq linqpad

为什么这会产生空集?

Object[] types = {23, 234, "hello", "test", true, 23};

var newTypes = types.Select(x => x.GetType().Name)
    .Where(x => x.GetType().Name.Equals("Int32"))
    .OrderBy(x => x);

newTypes.Dump();
Run Code Online (Sandbox Code Playgroud)

Jas*_*yon 11

当你做你的选择你得到一个IEnumerable<String>.然后你将列表中的每个字符串的类型(都是"字符串")并过滤掉它们不等于"Int32"(这是整个列表).Ergo ......列表是空的.


tva*_*son 5

Equals工作得很好,这是你的查询不正确.如果要在列表中选择整数,请使用:

var newTypes = types.Where( x => x.GetType().Name.Equals("Int32") )
                    .OrderBy( x => x );
Run Code Online (Sandbox Code Playgroud)


Kon*_*lph 5

颠倒操作的顺序:

var newTypes = types.Where(x => x is int)
    .OrderBy(x => x)
    .Select(x => x.GetType().Name);
Run Code Online (Sandbox Code Playgroud)

(请注意,这也使用直接类型检查而不是相当特殊.GetType().Name.Equals(…)).