gpt4 book ai didi

c# - 为什么将单个元素与 IEnumerable 进行比较不是编译错误

转载 作者:太空狗 更新时间:2023-10-29 20:10:14 25 4
gpt4 key购买 nike

var fooRef = new FooRef();
var fooRefEnumerable = Enumerable.Empty<FooRef>();

var fooRefEquality = (fooRef == fooRefEnumerable); //This compiles without any errors

var fooVal = new FooVal();
var fooValEnumerable = Enumerable.Empty<FooVal>();

//Compilation error : Error 1 Operator '==' cannot be applied to operands of type 'FooVal' and 'System.Collections.Generic.IEnumerable<FooVal>'
var fooValEquality = (fooVal == fooValEnumerable);

public class FooRef { }
public struct FooVal { }

为什么要比较单个对象和对 RefTypes 有效的 IEnumerable?

最佳答案

Why is it comparing a single object and an IEnumerable is valid for RefTypes?

因为返回true是完全可行的:

class CunningFooRef : FooRef, IEnumerable<FooRef>
{
// Implementation...
}

FooRef fooRef = new CunningFooRef();
IEnumerable<FooRef> fooRefEnumerable = Enumerable.Empty<FooRef>();
Console.WriteLine(fooRef == fooRefEnumerable); // False

fooRefEnumerable = (IEnumerable<FooRef>) fooRef;
Console.WriteLine(fooRef == fooRefEnumerable); // True

请注意,这对 fooRef 使用相同的编译时类型和 fooRefEnumerable如您所用。

如果封FooRef ,因此编译器知道对于 FooRef 来说不可能引用也是一个 IEnumerable<FooRef>引用,那么你会得到一个编译时错误。

关于c# - 为什么将单个元素与 IEnumerable 进行比较不是编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22487961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com