通用约束需要转换

时间:2017-07-10 10:52:10

标签: c# .net list generics

我创建了一个带有两个通用参数的方法,其中一个参数(itemsToAdd)必须与下一个参数(inputList)的泛型参数的类型相同。

请参阅此演示代码:

public class GenericsDemo
{
    public void AddToList<TList, TItems>(TList inputList, params TItems[] itemsToAdd)
        where TItems : IConvertible
        where TList : IEnumerable<TItems>

    {
        IEnumerable<IConvertible> someOtherList;

        // Sounds good, doesn't work..
        //someOtherList = inputList;

        // This works
        someOtherList = (IEnumerable<IConvertible>)inputList;
    }
}

我希望inputList可以直接分配到IEnumerable<IConvertible> someOtherList,但需要强制转换。为什么需要演员?

1 个答案:

答案 0 :(得分:3)

协方差仅适用于类,而不适用于结构(Source)。

因此,如果您将TItems限制为引用类型,则代码会编译(fiddle):

    where TItems : class, IConvertible