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 { }
Run Code Online (Sandbox Code Playgroud)
为什么比较单个对象和对RefTypes有效的IEnumerable?
为什么比较单个对象和IEnumerable对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
Run Code Online (Sandbox Code Playgroud)
请注意,这fooRef与fooRefEnumerable您正在使用的编译时类型相同.
如果你封印FooRef,所以编译器知道这是不可能的FooRef引用也为IEnumerable<FooRef>参考,那么你会得到一个编译时错误.
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |