Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 具有一般协方差的转换误差_C# 4.0_Generics_Covariance - Fatal编程技术网

C# 4.0 具有一般协方差的转换误差

C# 4.0 具有一般协方差的转换误差,c#-4.0,generics,covariance,C# 4.0,Generics,Covariance,我得到了以下代码,它给了我编译错误: cannot convert from 'UserQuery.SomeClass<int>' to UserQuery.Interface<System.IConvertible>' 无法从“UserQuery.SomeClass”转换为“UserQuery.Interface” 守则: void Main() { List<Interface<IConvertible>> values = new

我得到了以下代码,它给了我编译错误:

cannot convert from 'UserQuery.SomeClass<int>' to UserQuery.Interface<System.IConvertible>'
无法从“UserQuery.SomeClass”转换为“UserQuery.Interface”
守则:

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; }
}
void Main()
{
列表值=新列表();
Add(newsomeclass(){Value=50});
}
接口,其中T:IConvertible
{
T值{get;}
}
类SomeClass:接口,其中T:IConvertible
{
公共T值{get;set;}
}
但是,尝试添加
SomeClass
效果很好

values.Add(new SomeClass<string>() {Value = "50" });
添加(newsomeclass(){Value=“50”});
谁能解释一下为什么我可以用字符串,但不能用int或double等等…

我在这里找到了答案:

通常,值类型不支持差异。这就是为什么它不适用于int,但适用于string