重複投票を決定する前に、最後までお読みください...
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<>
あまり魔法がかかっていません。パラメータが実際にである場合のいくつかの特殊なケースIEnumerable<B>
、そして次のようになります。
foreach (object obj in source)
yield return (T)obj;
// ^^ this looks quite similar to the above B b2 = (B)a;
では、なぜ私の明示的なキャストは機能するのに、内部のキャストは機能しないの.Cast<>
ですか?
コンパイラは私の明示的なキャストをシュガーアップしますか?
PS。私はこの質問を見ましたが、その答えが実際に何が起こっているのかを説明しているとは思いません。