Почему помощник Linq Cast <> не работает с неявным оператором приведения?

Пожалуйста, прочтите до конца, прежде чем принимать решение о голосовании в двух экземплярах ...

У меня есть тип, который реализуетimplicit cast Оператор другого типа:

class A
{
    private B b;
    public static implicit operator B(A a) { return a.b; }
}
class B
{
}

Теперь неявное и явное приведение работает нормально:

B b = a;
B b2 = (B)a;

... так почему же у Линка.Cast<> не делает?

A[] aa = new A[]{...};
var bb = aa.Cast<B>();  //throws InvalidCastException

Глядя на исходный код для.Cast<>, там не так много магии: несколько особых случаев, если параметр действительноIEnumerable<B>, а потом:

foreach (object obj in source) 
    yield return (T)obj; 
    //            ^^ this looks quite similar to the above B b2 = (B)a;

Так почему жемой явная работа, но не та, что внутри.Cast<>?

Компилятор дополняет мое явное приведение?

PS. Я виделэтот вопрос но я не думаю, что его ответы действительно объясняют, что происходит.

Ответы на вопрос(2)

Ваш ответ на вопрос