Метод расширения, который работает с IEnumerable и IQueryable ?

Я хочу, чтобы метод расширения работал как с моим List, так и с IQueryable. Приведенные ниже методы расширения достигают этого, но затем, если я добавлю другой идентичный метод расширения, но для другого, совершенно несвязанного типа, я получаю неоднозначный вызов ошибок компиляции. Это почему? Разве компилятор не достаточно умен, чтобы знать, какой метод расширения работает? Я имею в виду, что только один из этих вызовов действителен, почему компилятор не может сказать? Большое спасибо!

class ClassA
{
  public bool IsActive{ get; set;}
}

class ClassB
{
  public bool IsActive { get; set;}
}


// then here are my extensions

public static T IsActive<T>(this T enumerableOrQueryable, bool isActive)
  where T : IEnumerable<ClassA>
{
  return (T)enumerableOrQueryable.Where(x => x.IsActive == isActive);
}

public static T IsActive<T>(this T enumerableOrQueryable, bool isActive)
  where T : IEnumerable<ClassB>
{
  return (T)enumerableOrQueryable.Where(x => x.IsActive == isActive);
}
6
задан funGhoul 10 October 2011 в 13:16
поделиться