Вопрос

Я знаю, что C # поддерживает ковариацию в таких массивах:

object[] array = new string[3];

Но я получаю сообщение об ошибке при попытке скомпилировать приведенный ниже код

class Dummy<K,T> where T:K
{
    public void foo()
    {
        K[] arr = new T[4];
    }
}

Там написано " Невозможно неявно преобразовать тип 'T []' в 'K []' "

Почему я получаю эту ошибку ???

Это было полезно?

Решение

Вы должны указать, что T и K являются ссылочными типами. Ковариация массива работает только со ссылочными типами. Измените объявление на:

class Dummy<K,T> where T : class, K

и все работает отлично. Вам не нужно указывать, что K является ссылочным типом, потому что если T является ссылочным типом, и он является производным от K или реализует его, то K также должен быть ссылочным типом. (По крайней мере, я предполагаю, что это и есть причина. Не мешало бы добавить where K : class также для ясности.)

Другие советы

тип T должен поддерживать неявное преобразование в K. Например.

T a = new T (); K b = a;

должен быть действительным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top