为什么使用Linq时接口丢失

本文关键字:接口 Linq 为什么 | 更新日期: 2023-09-27 18:16:56

我今天遇到了一些让我感到惊讶的事情,希望有人能给我解释一下发生了什么。看来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()返回相同的对象,但显然返回的对象具有不同的类型。有人能解释一下吗?

谢谢!汤姆b .

为什么使用Linq时接口丢失

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