为什么此示例打印为假?
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
bool assignable = typeof(Results<Foo>).IsAssignableFrom(typeof(IResults<object>));
Console.WriteLine(assignable);
}
}
public interface IResults<T>
{
IEnumerable<T> Items { get; }
}
public class Results<T> : IResults<T>
{
public IEnumerable<T> Items { get; set; }
}
public class Foo
{
public string Name { get; }
}
}
答案 0 :(得分:0)
false
是正确的结果。检查typeof(Results<Foo>).IsAssignableFrom(typeof(IResults<object>))
是否就像询问以下代码段是否可以编译:
Results<Foo> a = ...;
IResults<ojbect> b = ...;
a = b; // Will this compile?
假设IResults
是Results
实现的接口,则不能将IResults
对象分配给Results
引用,因为编译器无法知道运行时是否是否为Results
对象的类型。因此,在这里返回false
是有道理的。