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