перебирая универсальный тип T, если T IEnumerable без приведения - PullRequest
0 голосов
/ 13 февраля 2019

Следующий код скомпилируется, если foo приведен к типу, реализующему IEnumerable или dynamic.Есть ли способ добиться того же, не разыгрывая foo?Я знаю, что могу сделать два метода и не хочу навязывать больше ограничений T.

interface IDummy
{}

class FooBar<T> where T : class
{
    void Bar(T foo)
    {
       if (foo is IEnumerable<IDummy>)
          foreach (var item in foo)
             B(item);
       else if(foo is IDummy)
          B(foo);                      
    }  

    void B(IDummy item)
    {

    }
}

1 Ответ

0 голосов
/ 13 февраля 2019

Я не совсем уверен, каковы ваши причины, по которым вы не хотите сниматься, но будет ли что-то вроде этой работы для вас?

interface IDummy
{}

class FooBar<T> where T : class
{
    void Bar(T foo)
    {
       if (foo is IEnumerable<IDummy> enumerableFoo)
          foreach (var item in enumerableFoo)
             B(item);
       else if(foo is IDummy)
          B(foo);                      
    }  

    void B(T item)
    {

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...