The following code would compile if foo is casted to either a type implementing IEnumerable or dynamic. Is there a way to achieve the same without casting foo ? 
I am aware I could do two methods and don't wish to force more constraint to 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)
    {
    }
}
 
    