問題タブ [keyedcollection]
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# - KeyedCollection をコピーする最速の方法
私は C# オブジェクト コピー コンストラクターに取り組んでいます。その一部には、KeyedCollection の内容を新しい KeyedCollection にコピーすることが含まれます。これは私が現在実装しているものです:
これは正しいことを行います。コレクションは期待どおりにコピーされます。問題は、それも少し遅いことです。問題は、一意性を保証するソースからのものであることを知っていても、各 .Add(do) が既存のデータの一意性チェックを必要とすることだと推測しています。
このコピーコンストラクターをできるだけ速くするにはどうすればよいですか?
silverlight - Silverlight のキー付き ObservableCollection
Name というプロパティに基づいて一意のオブジェクトを格納するキー付きの監視可能なコレクションを Silverlight に実装したいと考えています。これを行う 1 つの方法は、含まれている要素のすべての PropertyChanged イベントをサブスクライブする ObservableCollectionEx (別のスタック オーバーフロー ポストのサンプル) クラスを使用し、name プロパティが変更されるかどうかを確認することです。さらに良いことに、name 属性が変更されたことを通知する独自のイベントを作成し、アイテムが既に存在する場合は ValidationException をスローします。必ずしもインデクサー this[Name] を使用してオブジェクトを取得する必要はありません。
このようなもの:
よりエレガントな別のソリューションはありますか? はるかに簡単ですか?ありがとう、エイドリアン
PS Wpf博士がまとめたObservableDictionaryもあり、Silvelightに簡単に移行できることは知っていますが、DataFormなどで使用する方法がわかりません。
c# - KeyedCollectionへの追加と取得
KeyedCollectionを使用して、文字列キー値に対してクラスを格納したいと思います。私は次のコードを持っています:
誰かが私がここで間違っていることを教えてもらえますか?キー値を取得できるように、どこでキー値を指定しますか?
c# - KeyedCollection をどのようにソートしますか?
基本的に私は を持っておりKeyedCollection<string, CustomNode>
、コレクションをキーで (またはできればカスタム比較機能で) ソートできるようにしたいと考えています。
これが不可能な場合、ソート可能な値にキーが埋め込まれている別のクラスを誰かが推奨できますか?
c# - KeyedCollection からキーのリストを取得する最も効率的な方法は何ですか?
一般的な辞書の (KeyCollection 型の) Keys プロパティと同じくらい効率的な方法を探しています。
Linq select ステートメントを使用すると機能しますが、キーが要求されるたびにコレクション全体を反復処理しますが、キーは既に内部に保存されている可能性があります。
現在、私の GenericKeyedCollection クラスは次のようになっています。
更新:あなたの回答のおかげで、Linq を反復処理する代わりに、次のプロパティを使用します。
python - Pythonのキー付きコレクション?
PythonのKeyedCollectionに相当するもの、つまり要素が独自のキーを持っている(または動的に生成する)セットはありますか?
つまり、ここでの目標は、キーを2つの場所に保存しないようにすることです。したがって、辞書は理想的とは言えません(したがって、質問です)。
c# - KeyedCollection は何のコレクションですか?
キー付きコレクションを反復処理するメソッドを作成したいと考えています。メソッドが、KeyedCollection<string, Collection<string>>
メソッドは次のとおりです。
ループ内の疑問符をどのタイプに置き換える必要があるかわからないため、明らかに機能しません。後でループ本体でandプロパティを呼び出す必要があるため、単純にobject
orを配置することはできません。私が探しているタイプは何ですか?ありがとう。var
Key
Value
c# - KeyedcollectionからSerializbleDIctionaryを実装しようとしていますが、オブジェクトを追加できません
簡単に言うと、ユーザーデータを保存するために、シリアル化できる辞書のような機能を備えたオブジェクトのセットが必要でした。元のディクショナリは、Itemオブジェクトの配列と、ユーザーが「保持する」各オブジェクトの量を保持するDictionaryクラスでした。インターネットでいくつかの推奨事項を見つけた後、KeyedCollectionから自分の辞書のようなクラスを実装しようとしましたが、オブジェクトを追加できないようです。オブジェクトを間違って追加していますか、それともコレクションに何か問題がありますか?
'SerialDictionary'クラス:
メインフォーム(オブジェクトを追加しようとしている)
オブジェクトを追加しようとしたときに受け取るエラー:
'System.Collections.ObjectModel.Collection.Add(int)'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります
そこにintをスローするとコンパイルされますが、そこにItemオブジェクトのコレクションを取得しようとしています...
c# - KeyedCollectionを読み取り専用にするにはどうすればよいですか?
まず、KeyedCollectionを使用している理由を説明します。DLLを作成していて、コレクションに追加する必要のあるアイテムのリストがあり、配置した順序のままにしますが、インデックスとキーの両方でアクセスする必要もあります(キーはすでに定義したオブジェクトのプロパティ)。これを行うもっと簡単なコレクションが他にある場合は、私に知らせてください。
さて、DLLの内部でこのコレクションにアイテムを追加できる必要がありますが、追加したアイテムを削除/変更したくないため、DLLのエンドユーザーが読み取り専用として公開できるようにする必要があります。 。
私はこのサイト、他のサイト、グーグル一般を検索しましたが、ある種の読み取り専用のKeyedCollectionを取得する方法を見つけることができませんでした。私が最も近かったのはこのページ(http://www.koders.com/csharp/fid27249B31BFB645825BD9E0AFEA6A2CCDDAF5A382.aspx?s=keyedcollection#L28)でしたが、完全に機能させることができませんでした。
アップデート:
私はそれらのC5クラスを調べました。それは、他のコメントとともに、私自身の読み取り専用クラスを作成する方法をよりよく理解するのに役立ち、それは機能しているようです。ただし、通常のものを読み取り専用のものにキャストしようとすると問題が発生します。コンパイル時に変換できないというエラーが発生します。これが私が作成したコードです(最初の小さなクラスは私が最初に持っていたものです):
この変数を定義している場合:
次に、これを行います。
コンパイルに失敗します。どちらも同じクラスから継承しているので、「互換性がある」と思いました。コレクションを作成したばかりの読み取り専用タイプとしてキャスト(または公開)するにはどうすればよいですか?
c# - タイプまたは名前空間の名前が見つかりませんでした
私はC#にかなり慣れていないので、これがばかげた質問であれば許してください。エラーが発生していますが、解決方法がわかりません。Visual Studio 2010 を使用しています。
このコード行
エラーが表示されます
私が読んだことから、これは継承されたクラスに抽象メンバーを実装することで解決できます
ただし、これにより、「型または名前空間名が見つかりませんでした TKey/TItem が見つかりませんでした」というエラーが表示されます。
ヘルプ!