где t: несколько классов

List<T> Foo<T>(Ilist list) 
where T : ??

есть ли любой способ осуществить T, чтобы быть
один из немногих классов?

в конечном счете я хочу сделать переключатель на T..

спасибо.

6
задан yoni 29 June 2010 в 12:41
поделиться

5 ответов

Применение ограничения типа таким образом указывает, что эти несколько классов связаны с общей функциональностью.

Вы должны реализовать общий интерфейс, а затем ограничить тип этим интерфейсом:

public interface IUseful
{
    public void UsefulMethod();
}

List<T> Foo<T>(IList list) where T : IUseful
{
    // You now have access to all common functionality defined in IUseful
}

Дополнительным преимуществом является то, что теперь вам не нужно включать T , чтобы реализовать другое поведение. Вы можете попросить потомков IUseful реализовать свое собственное поведение, а затем вызывать каждого по отдельности.

10
ответ дан 8 December 2019 в 02:40
поделиться

Вы можете потребовать, чтобы каждый класс, который вы хотите включить в свой список, реализовывал некоторый интерфейс ISomething , а затем создавал List .

в конце концов я хочу переключить T ..

Вместо переключения типа объекта было бы лучше иметь метод в вашем интерфейсе и реализовывать его по-разному для каждого класса.

15
ответ дан 8 December 2019 в 02:40
поделиться

Насколько я знаю, это невозможно. Я бы рекомендовал заимствовать ваш ограниченный набор классов из общего базового класса или интерфейса.

1
ответ дан 8 December 2019 в 02:40
поделиться

В этом случае T может быть общим базовым классом или интерфейсом, который вы перечисляете для общих объектов. У вас может быть List , и список может содержать классы Foo, Bar и Baz , если каждый из них реализует интерфейс IFoo . Если не использовать наследование, вы бы застряли со списком объектов.

6
ответ дан 8 December 2019 в 02:40
поделиться

Что вам нужно? После двоеточия вы можете перечислить типы, на которые вы накладываете ограничения T.

Для нескольких классов, возможно, достаточно реализовать один общий интерфейс и установить на него ограничение.

Более подробную информацию можно найти по этой ссылке: Ограничения на параметры типа (Руководство по программированию на C#)

2
ответ дан 8 December 2019 в 02:40
поделиться
Другие вопросы по тегам:

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