在决定投票为重复之前,请阅读到最后......
我有一种将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;
...那为什么 Linq.Cast<>没有呢?
A[] aa = new A[]{...};
var bb = aa.Cast<B>();  //throws InvalidCastException
查看 的源代码.Cast<>,并没有什么神奇之处:如果参数确实是 a IEnumerable<B>,则有一些特殊情况,然后:
foreach (object obj in source) 
    yield return (T)obj; 
    //            ^^ this looks quite similar to the above B b2 = (B)a;
那么为什么我的显式演员表起作用,但里面的演员表不起作用.Cast<>?
编译器会加糖我的显式转换吗?
PS。我看到了这个问题,但我认为它的答案并不能真正解释发生了什么。