在决定投票为重复之前,请阅读到最后......
我有一种将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。我看到了这个问题,但我认为它的答案并不能真正解释发生了什么。