我想了解为什么C#语言决定将这个测试表达式作为一个错误。
在testFunction中,我可以创建一个名为obj2的对象并将其隐式设置为obj,而无需进行强制转换。但是,为什么我不能在不进行强制转换的情况下检查这两个对象是否相同呢?它们显然实现了相同的接口,那么为什么会出错?
interface IA { }
interface IB { }
class Foo : IA, IB { }
class Program
{
static void testFunction<T>(T obj) where T : IA, IB
{
IA obj2 = obj;
if (obj == obj2) //ERROR
{
}
}
static void Main(string[] args)
{
Foo myFoo = new Foo();
testFunction(myFoo);
Console.ReadLine();
}
}
在testFunction中,我可以创建一个名为obj2的对象并将其隐式设置为obj,而无需进行强制转换。但是,为什么我不能在不进行强制转换的情况下检查这两个对象是否相同呢?它们显然实现了相同的接口,那么为什么会出错?