問題タブ [as-keyword]

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 投票する
9 に答える
537 参照

c# - C# キーワード "as" を使用しない理由はありますか?

私は以下を使用してそれを見つけます:

以下よりも書きやすく、理解しやすいです。

最初の構文を使用しないやむを得ない理由はありますか?

0 投票する
5 に答える
168 参照

c# - 「as」キーワードを使用するとオブジェクトの初期化が失われる

私は派生クラスを使用しており、as キーワードを使用して基本クラスをそれにキャストしています。これを行うと、派生クラスのコンストラクターが呼び出され、オブジェクトが初期化されますが、派生インスタンスは初期化されたオブジェクトにはなりません (null があります)。これがコードサンプルです。

「as」が通常、base->derived ではなく、derived->base に使用されるという問題はありますか、それともここで何か他のことが機能していますか?

0 投票する
10 に答える
1843 参照

c# - 「is」が「as」として実装されるのはなぜですか?

asこれが非常に自然な使用例であることを考えると (実際に何をするかわからない場合)、

は実質的に同等です (つまり、上記のコードからコンパイラによって生成されたCILは同等になります)。

編集:

私は自分の質問を明確にしていなかったと思います。もちろん冗長なので、2番目のスニペットを書くことはありません。最初のスニペットをコンパイルするときにコンパイラによって生成された CIL は、冗長な 2 番目のスニペットと同等であると主張しています。質問: a) これは正しいですか? b) もしそうなら、なぜそのようにis実装されているのですか?

これは、最初のスニペットが実際によく書かれたものよりもはるかに明確できれいだと思うためです。

結論:

is/ケースの最適化はasコンパイラの責任ではなく、JIT の責任です。

isまた、null チェックと同様に、両方の選択肢 (およびasおよび) よりも少ない (isそして安価な) 命令しかありませんcast

補遺:

CIL for as with nullcheck (.NET 3.5):

is とキャストの CIL (.NET 3.5):

CIL for is and as (.NET 3.5):

これらは簡潔にするために編集されています (メソッド宣言、nops、something() の呼び出しは削除されています)。

0 投票する
3 に答える
5030 参照

python - Python の `with` ステートメントのターゲットが予期せず None です

私は何かを理解していないようです---pythonwithステートメント。

このクラスを考えてみましょう:

今、withのようにそれを使用する場合

<test instance at memore blah> のような出力が期待できます。しかし、私はNoneを取得します。

ここで何か問題がありますか?どんな提案も役に立ちます。

(私は Python 2.6.6 を使用しています。)

編集:

ドキュメントを教えてくれたephementに感謝し ます。__enter__メソッドは次のように読む必要があります

0 投票する
3 に答える
14186 参照

c# - C#の「AS」キーワードに類似したJavaのキーワードはありますか?

私たちが知っているように、C#はオブジェクトが型であるかどうかのチェックを自動的に実行するASキーワードを提供し、そうである場合はそれを必要な型にキャストし、そうでない場合はnullを返します。

上記の例では、ObjectobjはUserタイプまたはその他のタイプにすることができます。ユーザーは、タイプUserまたはnullのオブジェクトを取得します。これは、C#のAsキーワードが最初にチェックを実行し、可能であれば、結果の型へのオブジェクトのキャストを実行するためです。

では、JavaにC#のASキーワードに相当するキーワードはありますか?

0 投票する
2 に答える
4048 参照

groovy - groovyのASキーワードを使用するにはどうすればよいですか

これは重複している可能性がありますが、「as」はグーグルにとって信じられないほど難しいキーワードであり、SOでさえクエリの一部として「as」を無視します。

だから私は「as」を反射的にサポートするクラスをどのように実装するのか疑問に思っています。クラスの例:

これにより、次のようなことが可能になります。

動作するが、役に立たない:

文字列と整数の「asType」をなんらかの方法でアタッチ/変更する必要がありますが、このような変更は「X」クラスに限定する必要があると思います...Xクラスは次のようなメソッドを実装できますか。

または、X内からString / Integerクラスを変更します。Xが実際に使用されるまでXでコードを実行しないため、これは難しいようです...Xの最初の使用が「3asX」の場合、Xは次のようになります。 Groovyが呼び出そうとする前にIntegerのasTypeをオーバーライドするチャンスは?

0 投票する
3 に答える
1427 参照

c# - 「as」キーワードに対応するために、参照型とnull許容型の両方を受け入れる汎用関数はありますか?

これは純粋な好奇心/挑戦であり、実用的な重要性はまったくありません。だから私は仕事を成し遂げる代替ソリューションを探していません.

この質問からDBNullをチェックしてから変数に割り当てる最も効率的な方法は? 次のようなこの回答が見つかりました。

上記の式を 1 つのジェネリック関数 (または 2 つ以上) に移動して、int?andstringの両方を受け入れ、次のように呼び出すことができますか?

要件:

1) DBNulls の場合、デフォルト値を指定するオプションが必要です。default(T)デフォルト値を指定しない場合に備えて、返すオプションも必要です。したがって、これは機能しません:

電話できないからoSomeObject.StringMemeber = oRow.Read<string>("Name")

オプションのパラメーターである必要はありません。オーバーロードすることもできます。

メソッド 1 と 2 はまったく同じ署名を持っているため、これはコンパイルされません。

2) ジェネリック関数 (オーバーロードの場合) は同じ名前にする必要があります。

3)asキーワードは、型のチェックとキャストを使用する必要があります。前に述べたようにIDataRecord、パフォーマンスなどを読み取ったり、強化したりするためのソリューションを実際に探しているわけではありません。


似たような質問があります

  1. 参照型と null 許容値型を使用する C# ジェネリック クラス

  2. (null 許容) 値型と参照型を受け入れる C# ジェネリック メソッドを作成できますか?

  3. ジェネリック メソッドは、参照型と Null 許容値型の両方を処理できますか?

asしかし、これはキーワードに非常に固有です。したがって、そこにある答えは当てはまりません。

補遺: これに対する解決策は 1 つではありません。どちらが最もエレガントな選択肢であるかを受け入れます。

0 投票する
2 に答える
70 参照

c# - `as` キーワードは、クラスのすべてのメンバーを戻しますか?

私はいくつかのテストを行っており、何か奇妙なことに遭遇しました。このインターフェースがあるとします

ご覧のとおり、読み取り専用です。だから今、私はそれを実装するクラスを作るつもりです

これで、それを読み取って設定できます。それでは、いくつかのテストを行いましょう。

最初に私はこれをしました:

それは予想されることです、それから私はこれをしました:

また、期待されること。しかし、私がこれを行うとき:

うまくいかないのはなぜですか?robot2をFighterBotとして扱っていませんか?したがって、Fuel を設定できるようにすべきではないでしょうか。

0 投票する
2 に答える
1397 参照

c# - moq と「as」キーワード

テストに役立つモックを提供しようとしています:

ただし、デバッガーで Thread.CurrentPrincipal がモックであることがわかりますが、「as」キーワードは null を返します。

理論をテストするために、この短いデモをまとめました。

バックグラウンドで as キーワードを使用するコードに moq を提供するにはどうすればよいですか?

私が理解していることから、おそらくプロキシがキャストバックする方法を提供する必要がありますか?

これは不可能だと思いますが、これを解決するために人々がどのようなアプローチをとっているのか疑問に思いました。