問題タブ [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.

0 投票する
1 に答える
286 参照

c# - 右側のオペランドがジェネリックの場合、「as」演算子はどのように変換されますか?

この質問への回答を投稿したばかりですが、回答に完全には確信が持てません。疑問に思っていることが2つあります。次のコードを検討してください。

によるとC# Specification 5.0、 の変換には 2 つの異なる種類がありas operatorます。

のコンパイル時の型がEでないdynamic場合、操作は次E as Tと同じ結果を生成します。

のコンパイル時の型が である場合Edynamicキャスト演算子とは異なり、as operatorは動的にバインドされません (§7.2.2)。したがって、この場合の展開は次のようになります。

これは次の理由で無効です。(Foo<T>)str

次のように訳すべきだと思いました。

しかし、仕様によると、これは の型が の場合にのみ発生しEますdynamic

だから私の質問は:

  1. コンパイラは、この式を通常は無効なコードに変換していますか?
  2. の型が動的な場合、が完全に有効であるのにE最初にキャストEするのはなぜですか?objectT(T)E