Ковариантность C#-Array в универсальных классах

Когда вы переходите от A к B, ваша история выглядит следующим образом:

  • pageA
  • pageBHomeUrl - текущий
[1120 ] Когда вы открываете модальный режим и вызываете pushState, ваша история будет выглядеть следующим образом:

  • pageA
  • pageBHomeUrl
  • pageBHomeUrl?

Когда вы закроете модал с помощью кнопки и вызовете replaceState, ваша история будет выглядеть так:

  • pageA
  • pageBHomeUrl
  • pageBHomeUrl - текущий

Это не то, что вы хотите. Вместо replaceState используйте popState в обработчике close, чтобы вернуться из модального режима к желаемой истории:

  • pageA
  • pageBHomeUrl - current [ 118]
6
задан 24 January 2009 в 19:34
поделиться

2 ответа

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

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

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

12
ответ дан 9 December 2019 в 22:41
поделиться

тип T должен поддерживать неявный convertion к K. Например.

T = новый T (); K b = a;

должно быть допустимым.

-1
ответ дан 9 December 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: