問題タブ [as-operator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 右側のオペランドがジェネリックの場合、「as」演算子はどのように変換されますか?
この質問への回答を投稿したばかりですが、回答に完全には確信が持てません。疑問に思っていることが2つあります。次のコードを検討してください。
によるとC# Specification 5.0
、 の変換には 2 つの異なる種類がありas operator
ます。
のコンパイル時の型が
E
でないdynamic
場合、操作は次E as T
と同じ結果を生成します。のコンパイル時の型が である場合
E
、dynamic
キャスト演算子とは異なり、as operator
は動的にバインドされません (§7.2.2)。したがって、この場合の展開は次のようになります。
これは次の理由で無効です。(Foo<T>)str
次のように訳すべきだと思いました。
しかし、仕様によると、これは の型が の場合にのみ発生しE
ますdynamic
。
だから私の質問は:
- コンパイラは、この式を通常は無効なコードに変換していますか?
- の型が動的な場合、が完全に有効であるのに
E
最初にキャストE
するのはなぜですか?object
T
(T)E