問題タブ [icollection]

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

.net - Queue(T) と Stack(T) が ICollection(T) を実装しないのはなぜですか?

質問する前に、明白な答えを教えてくださいICollection<T>インターフェイスにはRemove、任意の要素を削除するメソッドが含まれていますが、これは実際Queue<T>Stack<T>はサポートできません (「終了」要素しか削除できないため)。

わかりました。実際、私の質問はコレクション型Queue<T>またはStack<T>コレクション型に関するものではありません。むしろ、本質的に値のコレクションであるジェネリック型を実装ICollection<T>ないTという設計上の決定に関するものです。

これが私が奇妙だと思うものです。の任意のコレクションを受け入れるメソッドがありT、私が書いているコードの目的のために、コレクションのサイズを知ることが役立つとします。例 (以下のコードは簡単で、説明のためだけです!):

さて、これらの型が を実装していないことを除いて、このコードがQueue<T>や で動作できない理由は本当にありません。もちろん、彼らは を実装しています — 私は主にプロパティだけを推測しています — しかし、それは次のような奇妙な最適化コードにつながります:Stack<T>ICollection<T>ICollectionCount

インターフェースを完全に放棄ICollectionする方が理にかなっているのではないでしょうか(もちろん、実装をドロップするという意味ではありません。これは重大な変更になるためです。つまり、使用をやめるだけです) ICollection<T>。完全に一致しないメンバーは?

つまり、ICollection<T>提供するものを見てください。

  • Count--Queue<T>そしてStack<T>両方ともこれを持っています。
  • IsReadOnly--Queue<T>そして、これはStack<T>簡単に手に入れることができます。
  • Add--これを ( を使用して)Queue<T>明示的に実装できます( を使用)。EnqueueStack<T>Push
  • Clear- 小切手。
  • Contains- 小切手。
  • CopyTo- 小切手。
  • GetEnumerator-- 確認してください (当たり前)。
  • Remove--完全に一致ないのはこれだけです。Queue<T>Stack<T>

そして、これが本当のキッカーです: ;ICollection<T>.Remove を返します。boolしたがって、 の明示的な実装は、削除する項目が実際に head 要素Queue<T>であるかどうかを (たとえば) 完全にチェックし( を使用)、そうであれば を呼び出して returnを、そうでなければ returnを返すことができます。と を使用して同様の実装を簡単に行うことができます。PeekDequeuetruefalseStack<T>PeekPop

さて、これが可能であると考える理由について約 1000 語を書いたので、明らかな疑問を提起します。なぜこのインターフェースの設計者と実装者はこのインターフェースを実装しなかったのでしょうか? Queue<T>Stack<T>つまり、これが間違った選択であるという決定につながった設計要因 (おそらく考慮していない) は何でしたか? なぜICollection代わりに実装されたのですか?

自身の型を設計する際に、この質問をする際に見落としている可能性のあるインターフェイスの実装に関して考慮すべき指針があるかどうか疑問に思っています。たとえば、一般的に完全にサポートされていないインターフェイスを明示的に実装することは、単に悪い習慣と見なされますか (そうであれば、List<T>実装などと競合するように見えますIList)? キュー/スタックの概念と何を表現するかの間に概念上の断絶はありますか?ICollection<T>

Queue<T>基本的に、かなり正当な理由(たとえば)が実装されていないに違いないと感じており、ICollection<T>情報を得て十分に検討することなく、自分の型を設計したり、不適切な方法でインターフェイスを実装したりすることをやみくもに進めたくありません。私がしていること。

超長い質問で申し訳ありません。

0 投票する
4 に答える
15707 参照

c# - IEnumerableとIEnumerableの違い

IEnumerableとの違いは何IEnumerable<T>ですか?

これらのインターフェイスの両方を実装する多くのフレームワーククラスを見てきました。したがって、両方を実装することでどのような利点が得られるのか知りたいですか?

それらがどのように定義されているかを見てください:

ご覧のとおり、IEnumerable<T>から派生します。つまり、持ってIEnumerableいるものは何でも継承します。それでは、なぜ、単にではなく両方を実装するのでしょうか。実装が不十分ですか?IEnumerableIEnumerable<T>IEnumerable<T>IEnumerable<T>

同様に、他の同様のペアがあります。

  • IListIList<T>
  • ICollectionICollection<T>

これらについても知りたいです。

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

collections - System.Object[]をSystem.Collections.Generic.Listに変換できません

オブジェクトパラメータを持つメソッドがあります。

オブジェクトを作品に変換することがわかりましたIList

ただし、に変換することListはできません。

IListとの両方の定義を調べましたが、どちらもとインターフェイスListを実装しているようです。なぜ機能しないのか疑問に思いますが、機能します。フレームワークのどこでクラッシュしますか、またその理由は何ですか?EnumeratorCollectionListIList

0 投票する
7 に答える
15090 参照

c# - インターフェイスの一部のメンバーを非表示にする方法

を実装するカスタムコレクションを作成したいと思いますICollection

ICollectionしかし、私は同じようなClear方法のいくつかのメンバーを公開したくありません。

これを達成する方法は?

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

c# - バッキング コレクションを使用して ICollection を実装する場合のコード コントラクトの警告

私はこのコードを持っています:

次の警告が表示されます。

  • 追加: CodeContracts: 証明されていないことを保証します:this.Count >= Contract.OldValue(this.Count)
  • Clear: CodeContracts: 証明されていないことを保証します:this.Count == 0
  • 内容: CodeContracts: 証明されていないことを保証:!Contract.Result<bool>() || this.Count > 0
  • CopyTo: CodeContracts: 証明されていないものが必要:arrayIndex + this.Count <= array.Length

これらを修正するにはどうすればよいですか? これらを抑制する方法はありますか?

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

c# - C#SettingsPropertyCollectionからプロパティを取得する

web.configにプロファイルプロバイダーがあります

使用可能なすべてのプロパティ(CustomField1、CustomField2 ....)を含むstring[]配列を取得するにはどうすればよいですか。

編集: 実用的な解決策を見つけましたが、それが最良で最も簡単な解決策であるかどうかはわかりません。

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

c# - ICollection Count の呼び出しが反復になるかどうかを判断する

からオブジェクトにアクセスしたいとします。サイズを決定するためだけにCollection全体を反復処理しないようにしたいとします。Collection

Countへの呼び出しが実際にコレクションを反復するかどうかを判断および制御するにはどうすればよいですか? (私自身のICollection) の実装を使用する以外に、つまり、これを提供する実装はありますか?

プログラマーのヒーローの質問に答えて。IEnumerable<T>コレクションに 100 万個のドキュメントを追加し、それを数えて への呼び出しの速度も確認できると思いCountます。

コレクションの数とアイテムごとのデータが非常に多いため、一度にすべてを返すのは問題になるため、IEnumerableoverを使用することを選択する可能性があるため、この質問をしました。Collection

IEnumarableただし、別の質問で、ジョシュアがロックするのは良い考えではないと指摘したことの欠点も知りたいです。

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

c# - IList と ICollection のジェネリック版に同じメソッド セットがないのはなぜですか?

IListと の一般的な対応物が同じメソッドとプロパティのセットをICollection持たない特定の理由はありますか? 彼らは彼らを動かしたようです。

元。 IList<T>もっている

しかしIList

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

c# - ICollection を分割するデリミタシーケンス付き

これはC# 3.5用です

区切り文字がシーケンスである個別の ICollections に分割しようとしている ICollection があります。

例えば

結果として

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

list - C#静的インデックスカウンターを使用して独自のリストを作成しようとしています

Listで使える機能を自分で作りたいforeach loop。IndexOf のような他の重要なコマンドもListあります (リストは動的に変化するため、これだけが気に入らない点です)。私のリストにあるものは、すべてのインデックスを追跡する必要があります。AddContainsCountRemove、および[]アクセサ (これを行う方法がわからない) と同様に、今のGetところトリックを実行する必要があります。

List は、エンティティと呼ばれる基本クラスにキャストする必要があります。これは、類似性のために他の 2 つのクラス Npc / Player 間で共有されます。

とにかく、私はこのサーバーもコーディングしているクライアントを制御できませんが、プロトコル仕様では、すべてのプレーヤーが、通常のリストがインデックスに対して行う劇的な動的変更を行わずにインデックスを追跡する必要があります。

自分で作成する方法のチュートリアルに従っていますが、Collections解決できないエラーが3つになりました。



また、私はこれを正しくやっていますか?または何かが危険に見えます。

助けてくれてありがとう.. C# のこの部分は非常に高度で、概念を把握するのが難しいようです。

EntityList へのソース

EntityListEnumerator へのソース

}