使用Linq时为什么界面会丢失?

时间:2016-11-08 20:21:02

标签: c# linq

我今天遇到了一些令我惊讶的事情,希望有人可以向我解释发生了什么。看来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.

1 个答案:

答案 0 :(得分:2)

.Where()将返回IEnumerable<One>,而不是One的单个对象,因为One内的多个List<One>对象可以满足条件。 .First()方法将检索可在One中找到的第一个IEnumerable<One>对象。