問題タブ [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.
.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>
ICollection
Count
インターフェースを完全に放棄ICollection
する方が理にかなっているのではないでしょうか(もちろん、実装をドロップするという意味ではありません。これは重大な変更になるためです。つまり、使用をやめるだけです) ICollection<T>
。完全に一致しないメンバーは?
つまり、ICollection<T>
提供するものを見てください。
Count
--Queue<T>
そしてStack<T>
両方ともこれを持っています。IsReadOnly
--Queue<T>
そして、これはStack<T>
簡単に手に入れることができます。Add
--これを ( を使用して)Queue<T>
明示的に実装できます( を使用)。Enqueue
Stack<T>
Push
Clear
- 小切手。Contains
- 小切手。CopyTo
- 小切手。GetEnumerator
-- 確認してください (当たり前)。Remove
--完全に一致しないのはこれだけです。Queue<T>
Stack<T>
そして、これが本当のキッカーです: ;ICollection<T>.Remove
を返します。bool
したがって、 の明示的な実装は、削除する項目が実際に head 要素Queue<T>
であるかどうかを (たとえば) 完全にチェックし( を使用)、そうであれば を呼び出して returnを、そうでなければ returnを返すことができます。と を使用して同様の実装を簡単に行うことができます。Peek
Dequeue
true
false
Stack<T>
Peek
Pop
さて、これが可能であると考える理由について約 1000 語を書いたので、明らかな疑問を提起します。なぜ、このインターフェースの設計者と実装者はこのインターフェースを実装しなかったのでしょうか? Queue<T>
Stack<T>
つまり、これが間違った選択であるという決定につながった設計要因 (おそらく考慮していない) は何でしたか? なぜICollection
代わりに実装されたのですか?
私自身の型を設計する際に、この質問をする際に見落としている可能性のあるインターフェイスの実装に関して考慮すべき指針があるかどうか疑問に思っています。たとえば、一般的に完全にサポートされていないインターフェイスを明示的に実装することは、単に悪い習慣と見なされますか (そうであれば、List<T>
実装などと競合するように見えますIList
)? キュー/スタックの概念と何を表現するかの間に概念上の断絶はありますか?ICollection<T>
Queue<T>
基本的に、かなり正当な理由(たとえば)が実装されていないに違いないと感じており、ICollection<T>
情報を得て十分に検討することなく、自分の型を設計したり、不適切な方法でインターフェイスを実装したりすることをやみくもに進めたくありません。私がしていること。
超長い質問で申し訳ありません。
c# - IEnumerableとIEnumerableの違い?
IEnumerable
との違いは何IEnumerable<T>
ですか?
これらのインターフェイスの両方を実装する多くのフレームワーククラスを見てきました。したがって、両方を実装することでどのような利点が得られるのか知りたいですか?
それらがどのように定義されているかを見てください:
ご覧のとおり、IEnumerable<T>
から派生します。つまり、持ってIEnumerable
いるものは何でも継承します。それでは、なぜ、単にではなく両方を実装するのでしょうか。実装が不十分ですか?IEnumerable
IEnumerable<T>
IEnumerable<T>
IEnumerable<T>
同様に、他の同様のペアがあります。
IList
とIList<T>
ICollection
とICollection<T>
これらについても知りたいです。
collections - System.Object[]をSystem.Collections.Generic.Listに変換できません
オブジェクトパラメータを持つメソッドがあります。
オブジェクトを作品に変換することがわかりましたIList
。
ただし、に変換することList
はできません。
IList
との両方の定義を調べましたが、どちらもとインターフェイスList
を実装しているようです。なぜ機能しないのか疑問に思いますが、機能します。フレームワークのどこでクラッシュしますか、またその理由は何ですか?Enumerator
Collection
List
IList
c# - インターフェイスの一部のメンバーを非表示にする方法
を実装するカスタムコレクションを作成したいと思いますICollection
。
ICollection
しかし、私は同じようなClear
方法のいくつかのメンバーを公開したくありません。
これを達成する方法は?
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
これらを修正するにはどうすればよいですか? これらを抑制する方法はありますか?
c# - C#SettingsPropertyCollectionからプロパティを取得する
web.configにプロファイルプロバイダーがあります
使用可能なすべてのプロパティ(CustomField1、CustomField2 ....)を含むstring[]配列を取得するにはどうすればよいですか。
編集: 実用的な解決策を見つけましたが、それが最良で最も簡単な解決策であるかどうかはわかりません。
c# - ICollection Count の呼び出しが反復になるかどうかを判断する
からオブジェクトにアクセスしたいとします。サイズを決定するためだけにCollection
全体を反復処理しないようにしたいとします。Collection
Count
への呼び出しが実際にコレクションを反復するかどうかを判断および制御するにはどうすればよいですか? (私自身のICollection
) の実装を使用する以外に、つまり、これを提供する実装はありますか?
プログラマーのヒーローの質問に答えて。IEnumerable<T>
コレクションに 100 万個のドキュメントを追加し、それを数えて への呼び出しの速度も確認できると思いCount
ます。
コレクションの数とアイテムごとのデータが非常に多いため、一度にすべてを返すのは問題になるため、IEnumerable
overを使用することを選択する可能性があるため、この質問をしました。Collection
IEnumarable
ただし、別の質問で、ジョシュアがロックするのは良い考えではないと指摘したことの欠点も知りたいです。
c# - IList と ICollection のジェネリック版に同じメソッド セットがないのはなぜですか?
IList
と の一般的な対応物が同じメソッドとプロパティのセットをICollection
持たない特定の理由はありますか? 彼らは彼らを動かしたようです。
元。
IList<T>
もっている
しかしIList
、
c# - ICollection を分割するデリミタシーケンス付き
これはC# 3.5用です
区切り文字がシーケンスである個別の ICollections に分割しようとしている ICollection があります。
例えば
結果として
list - C#静的インデックスカウンターを使用して独自のリストを作成しようとしています
List
で使える機能を自分で作りたいforeach loop
。IndexOf のような他の重要なコマンドもList
あります (リストは動的に変化するため、これだけが気に入らない点です)。私のリストにあるものは、すべてのインデックスを追跡する必要があります。Add
、Contains
、Count
、Remove
、および[]
アクセサ (これを行う方法がわからない) と同様に、今のGet
ところトリックを実行する必要があります。
List は、エンティティと呼ばれる基本クラスにキャストする必要があります。これは、類似性のために他の 2 つのクラス Npc / Player 間で共有されます。
とにかく、私はこのサーバーもコーディングしているクライアントを制御できませんが、プロトコル仕様では、すべてのプレーヤーが、通常のリストがインデックスに対して行う劇的な動的変更を行わずにインデックスを追跡する必要があります。
自分で作成する方法のチュートリアルに従っていますが、Collections
解決できないエラーが3つになりました。
また、私はこれを正しくやっていますか?または何かが危険に見えます。
助けてくれてありがとう.. C# のこの部分は非常に高度で、概念を把握するのが難しいようです。
EntityList へのソース
EntityListEnumerator へのソース
}