chciałbym napisać następującą metodęJak uczynić metoda rodzajowa, które mają ogólny typ
private void Foo<T, TItem>(T<TItem> param1)
Gdzie T musi być typem generycznym trwa TItem jako rodzajowy informacji.
przykładem połączenia byłoby jak:
private void Main()
{
List<int> ints = new List<int>();
Foo<List, int>(ints);
}
Edit: w moim przypadku będę potrzebował tylko dla zbiorów. Rzeczywistym przypadkiem użycia jest to, że chciałem napisać metodę, która dodaje coś do ICollection, niestety ICollection
nie ma metody .Add
, którą ma tylko ICollection<T>
.
nie mogę zmienić metodę:
private Foo<T>(ICollection<T>)
ponieważ z tym tracę informacje jaki typ rzeczywisty liście to, co jest dla mnie ważniejsze niż to, co wpisać pozycje na liście.
więc narodził się powyższy pomysł, który nie zadziałał.
Nie sądzę, że to możliwe, biorąc pod uwagę, że 'List' zawsze oczekuje parametru rodzajowego. – MutantNinjaCodeMonkey
Nie sądzę, że można zrobić to ograniczenie. A co z tym, że T jest typem generycznym, który implementuje IInterface, gdzie T pochodzi od TItem? –
Naprawdę nie rozumiem, w jaki sposób 'Foo' wymagał by' T' i 'TItem' były powiązane w opisany sposób; czy mógłbyś podać bardziej konkretny przykład? – Codor