Собираете типы, которые реализуют определенный интерфейс без приведения? - PullRequest
0 голосов
/ 05 мая 2009

По сути, я хочу знать, реализуют ли все типы в определенном пространстве имен определенный интерфейс, такой как IEnumerable.

Я знаю, что могу сделать:

foreach type ...
    if type is IEnumerable
        ...

Но я не хочу приводить тип просто для запроса, реализует ли он интерфейс, потому что приведение будет отброшено в любом случае.

Ответы [ 3 ]

6 голосов
/ 05 мая 2009

Использование оператора is - это не приведение, это тест, который звучит так, как вы хотите. Приведение типов в C # выполняется с использованием оператора принудительного приведения типов (имя?), Например:

((IEnumerable)someCollection)

или оператор безопасного литья:

someCollection as IEnumerable
3 голосов
/ 05 мая 2009

Предполагая, что я правильно вас прочитал, вам нужен список типов в перечислении, которые реализуют определенный интерфейс или супертип. Возможно Enumerable.OfType (этот источник IEnumerable) полезен?

var enumerables = myListOfThingsToCheck.OfType<IEnumerable>();
1 голос
/ 05 мая 2009

Я думаю, это будет работать, если вы предпочитаете использовать лямбда-синтаксис.

var enumerables=Assembly.GetExecutingAssembly().GetTypes().Where(t => t.Namespace == "YOUR NAMESPACE HERE").OfType<IEnumerable>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...