Почему помощник 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. Я виделэтот вопрос но я не думаю, что его ответы действительно объясняют, что происходит.