問題タブ [ienumerator]
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# - IEnumerator目的
C#コレクションのIEnumeratorの使用法がよくわかりません。それは何のために使用され、なぜそれが使用されるべきですか?
オンラインでhttp://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspxを調べてみまし たが、その記事はあまり意味がありません。私が尋ねる理由はUnity3dゲームエンジンにあり、yield関数と一緒に使用されます。IEnumeratorを使用する理由を理解しようとしています。
c# - IEnumeratorを実装する動的に生成されたクラスGetEnumerator()およびIEnumerator IEnumerable.GetEnumerator()
Reflection.Emitに問題があります。ICollectionの実装が簡単な動的に作成されたクラスが必要です。次の2つではなく、私がうまく定義したすべてのメソッド:public IEnumerator GetEnumerator()&IEnumerator IEnumerable.GetEnumerator()次のコードは、動的クラスに何を入れたいかを示しています。
これは、動的アセンブリを開いたリフレクターから出力されます。
私は自分のクラスを次のように定義しています:
myType.CreateTypeを呼び出すと、TypeLoadExceptionがメッセージとともにスローされます。GetEnumeratorメソッドには実装がありません。IEnumerable.GetEnumeratorメソッドの問題について提案しています。これは、ILでも、C#での記述に問題があったためです:)。誰か助けてもらえますか?
c# - IEnumerator から例外がスローされた場合.MoveNext() または .Current、まだ破棄する必要がありますか?
直感的にはそうだと思いますが、私が知らない慣習があるかどうかはわかりません。
vb.net - J# コレクションから VB .NET コレクションへ
J# データ型を返す一連の API 呼び出しがあります。ほとんどのデータ型 (Integer、Boolean、Double、Float など) を問題なく変換できました。
私が今する必要があるのは、java.Util.Collection を VB .NET コレクション (ArrayList?) に変換することです。
これが私の試みです:
「'AbstractListlistIterator' 型のオブジェクトを 'System.Collections.IEnumerator 型にキャストできません。
c# - IEnumerable と IEnumerator に関する質問
次のコードを使用して、myClass が foreach を使用できるようにします。しかし、私はプログラミングにかなり慣れていないため、次のコードを理解するのが少し困難です。コメントで私の問題を説明しました。いくつかの情報を提供していただければ幸いです。
.net - usingステートメント内のクロージャー内で可変構造体変数をキャプチャすると、ローカルの動作が変わるのはなぜですか?
更新:まあ、今私は行ってそれをしました:私はそれが正しい振る舞いであると真剣に疑っているので、これについてマイクロソフトにバグレポートを提出しました。とはいえ、この質問に関して何を信じるべきかはまだ100%わかりません。ですから、「正しい」ものはある程度の解釈に開かれていることがわかります。
私の考えでは、Microsoftはこれがバグであることを受け入れるか、using
ステートメント内の可変値型変数の変更が未定義の動作を構成すると応答します。
また、その価値については、少なくともここで何が起こっているのかについては推測できます。コンパイラがクロージャのクラスを生成し、ローカル変数をそのクラスのインスタンスフィールドに「リフト」しているのではないかと思います。using
ブロック内にあるので、フィールドを作成していますreadonly
。LukeHが他の質問へのコメントで指摘したように、これにより、フィールド自体の変更などのメソッド呼び出しが防止さMoveNext
れます(代わりにコピーに影響します)。
注:読みやすさのためにこの質問を短くしましたが、まだ正確に短いわけではありません。元の(長い)質問全体については、編集履歴を参照してください。
ECMA-334の関連セクションであると私が信じていることを読み通しましたが、この質問に対する決定的な答えを見つけることができないようです。私は最初に質問を述べ、次に興味のある人のためにいくつかの追加のコメントへのリンクを提供します。
質問
を実装する可変値型がある場合は、IDisposable
(1)using
ステートメント内のローカル変数の値の状態を変更するメソッドを呼び出すことができ、コードは期待どおりに動作します。ただし、ステートメント内のクロージャ内using
で問題の変数をキャプチャすると、(2)値への変更はローカルスコープに表示されなくなります。
この動作は、変数がクロージャー内およびusing
ステートメント内でキャプチャされた場合にのみ明らかになります。using
1つ( )または他の条件(閉鎖)のみが存在する場合は明らかではありません。
ステートメント内のクロージャー内で可変値型の変数をキャプチャすると、using
そのローカル動作が変わるのはなぜですか?
以下は、項目1と2を示すコード例です。どちらの例も、次のデモンストレーションMutable
値タイプを利用します。
1.using
ブロック内の値型変数の変更
出力コードは以下を出力します:
using
2.ブロック内のクロージャ内の値型変数をキャプチャする
上記のコードは次のように出力します。
さらなるコメント
Monoコンパイラは、私が期待する動作を提供することに注意してください(ローカル変数の値への変更は、using
+クロージャの場合でも表示されます)。この振る舞いが正しいかどうかは私にはわかりません。
この問題に関する私の考えの詳細については、こちらを参照してください。
.net - IEnumerable の再利用.Any() などで false の結果になる
私は延期された実行の土地で少し迷っています:
IEnumerable 実装クラスのインスタンスを宣言します
次に、それを繰り返します(最初の単語は「Lorem」です)
.. コンソールに書き込まれます。
その後、コードで私は
..出力として False を取得します。
ここで、.Any(..) 部分を foreach ループの上に置くと、true になりますが、ループは 2 番目の単語から始まります。
私の期待は、.NetがIEnumerableとその基礎となるIEnumeratorへの呼び出しごとに異なるランタイム「コンテキスト」を作成するため、それらが干渉しないことでした...適切な結果?
ここで何が欠けていますか?
更新:
- IEnumerable 実装へのリンク: https://gist.github.com/814352
- IEnumerator 実装へのリンク: https://gist.github.com/814354
- .. そして最後に、基礎となるテキスト パーサーの実装: https://gist.github.com/814358
.. 基本的には、特定の文字列内の単語を反復処理できる IEnumerable です。
c++-cli - C++/CLI IEnumerable および IEnumerator の実装
C++/CLI で IEnumerable と IEnumerator を実装する方法の実際の段階的な例はありますか? または、Visual Studio 2005 でコンパイルされない MS Connect の次のコードを修正する方法を知っている人はいますか?
コンパイラは、列挙子メソッドの実装を見つけることができません:
c# - IEnumeratorを実装するクラスにIEnumerator.Currentが必要なのはなぜですか?
を実装するクラスがありますIEnumerator<string>
。下記参照:
IEnumerator<T>
.CurrentプロパティがインターフェイスとIEnumerator
(IEnumerator<T>
継承する)インターフェイスの両方に存在するという事実に加えて、それを実装するポイントは何ですか?上で見たように、それは呼ばれることさえありません。
c# - ReSharper: 列挙子で NullReferenceException の可能性がありますか?
ReSharperSystem.NullReferenceException
は、次のコードの可能性について通知します。
具体的には、次のことを強調しています。
どのような状況で例外が発生するかわかりません。私の理解では、while
-loops 内部ステートメントはMoveNext()
、次の要素に列挙子を設定できる場合にのみ実行されます。