我今天遇到了一些令我惊讶的事情,希望有人可以向我解释发生了什么。看来Linq枚举可以干扰对象实现的接口。如果您运行此代码:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
interface One
{
int id {get; set; }
}
class A : One
{
public int id {get; set; }
}
interface Two
{
}
class B : A, Two
{
}
public static void Main()
{
var list = new List<One>() { new B {id = 1} };
var b1 = list.Where(x => x.id == 1);
var b2 = list.First();
Console.WriteLine(b1 is Two);
Console.WriteLine(b2 is Two);
}
}
输出结果为:
False
True
我期待Where()和First()返回相同的对象,但显然返回的对象有不同的类型。有人可以对此有所了解吗?
谢谢! -Tom B.
答案 0 :(得分:2)
.Where()
将返回IEnumerable<One>
,而不是One
的单个对象,因为One
内的多个List<One>
对象可以满足条件。 .First()
方法将检索可在One
中找到的第一个IEnumerable<One>
对象。