我得到了以下代码,它给了我编译错误:
cannot convert from 'UserQuery.SomeClass<int>' to UserQuery.Interface<System.IConvertible>'
代码:
void Main()
{
List<Interface<IConvertible>> values = new List<Interface<IConvertible>>();
values.Add(new SomeClass<int>() {Value = 50 });
}
interface Interface<out T> where T : IConvertible
{
T Value { get; }
}
class SomeClass<T> : Interface<T> where T : IConvertible
{
public T Value { get; set; }
}
但是,尝试添加SomeClass<string>
可以正常工作。
values.Add(new SomeClass<string>() {Value = "50" });
谁能解释一下为什么我可以为字符串做这件事,但不能为 int 或双精度等等......
我在这里找到了答案:这是 C# 4 中的协方差错误吗?
通常,值类型不支持方差。这就是为什么它不适用于 int,但适用于字符串。