我创建了一个具有两个通用参数的方法,其中一个参数(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,但是需要强制转换。为什么需要演员表?

最佳答案

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

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

    where TItems : class, IConvertible

08-16 17:29