問題タブ [collectionbase]
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.
reflection - Reflections (または Microsoft.Cci) による CollectionBase の型の決定
質問: Reflection または Microsoft.Cci を使用して、
から派生した型に含まれる型を確実に判別する静的な方法はありますか?CollectionBase
背景:
私は、型をコピーし、それらの型のカスタマイズされたバージョンを作成し、それらの間のコンバーターを作成するコード ジェネレーターに取り組んでいます。Microsoft.Cci を介してソース アセンブリ内の型を調べます。テキスト テンプレートを使用してソース コードを出力します。多くの変換とカスタマイズを行い、私が気にしないコードを放り出します。
結果のコードでは、 、、または以前に使用されList<T>
たすべての場所を置き換えるつもりです。追加の作業なしでシリアル化できると確信しているため 、使用したいと思います。これは、アプリケーションにとって重要です。あらゆる場合において具体的です。カスタム実装をコピーする必要があるため、クラスをコピーしないようにしています。コード ジェネレーターでそれを行う必要はありません。CollectionBase
IEnumerable<T>
T[]
List<T>
T
CollectionBase
私が問題を抱えている唯一の部分は、カスタムを交換するときの決定T
です。List<T>
CollectionBase
これまでに行ったこと:
MSDN のドキュメントと のサンプルを簡単に調べたところ、派生型でCollectionBase
カスタム メソッドを作成することが言及されています。Add
これは決して強制されているとは思わないので、それに頼ることができるかどうかはわかりません. 実装者は別の名前を付けたり、さらに悪いことに、Object
唯一の共通の祖先として複数の型をサポートするコレクションを持っている可能性があります。
私が検討した代替案:
おそらく、デフォルトのシリアライゼーションは、私が利用できるいくつかのトリックを行います。コレクションのデフォルトのシリアライゼーションはありますCollectionBase
か、それとも通常は自分で実装する必要がありますか? 自分でやらなければならない場合、型を判断するために調べることができる信頼できるメタデータはありますか? デフォルトのシリアル化をサポートしている場合、コレクション内のアイテムのランタイム タイプに依存していますか?
コード ジェネレーターでCollectionBase
、対応するT
forにマップされた既知の型のマッピングを作成できList<T>
ます。見つかった特定のCollectionBase
型がリストにない場合は、例外をスローします。信頼できる代替手段がない場合は、おそらくこれを使用します。
c# - CollectionBase クラスは引き続きサポートされますか?
を継承したクラスを作りたいのですが、CollectionBase
LINQ拡張機能に対応していないようです!
まだサポートされていますか? または、代替ソリューションはありますか?
c# - 誰かが CollectionBase から項目を読み取っていることを知る方法
CollectionBase クラスを使用してこれが可能かどうかはわかりません。誰かが CollectionBase クラスの項目にいつアクセスしているか知りたいです。
最終的な目標は、"VirtualMode" (DataGridView コントロールに似ています) を作成することです。これにより、ユーザーがデータを取得する前に、データをチェックして検証することができます。
つまり、たとえば 20 個のオブジェクトのコレクションを作成でき、内部で IList を変更して 20 個の null オブジェクトを含めることができます。次に、アイテムを読み取ろうとすると、null の場合は、外部データ ソースに移動して読み取ります。その時に入れます。次に、既存の null オブジェクトを読み取りクラスに置き換えます。次にアクセスしようとすると、キャッシュされたバージョンが取得されます。
それを入力した後。OnValidate がそれを行うのに適切な場所であるかどうか疑問に思います。
どんな援助でも大歓迎です。
トレバー・ワトソン
c# - ジェネリック コレクション - CollectionBase、IBindingList、およびアイテムの変更/編集時のイベントの発生
IBindingList を使用して GenericCollection を実装しました。これはうまく機能し、アイテムが追加または削除されたときにイベントを発生させます。アイテムが期待どおりに変更/編集された場合、イベントは発生しません。このコレクションを使用する各クラス内で INotifyPropertyChanged を実装することなく、変更または編集をキャッチするロジックを実装する簡単な方法はありますか?
私は不可能なことを探しているかもしれませんが、基本的に、コレクションを使用するクラスごとに INotifyPropertyChanged をコーディングすることなく DataTable の機能を模倣しようとしており、グリッドに編集/変更を受信させたいと考えています。
ありがとう、
マーク
c# - コレクション基本クラスの IList リスト?
質問は、奇妙なプロパティを実装するコレクション基本クラスに関するものです。
1) コレクション基底クラスの Ilist List とは?? ...
2)初期化すらされていません...どうやってアクセスできますか...
3) このリストをいつ使用するか?
c# - ジェネリック コレクションを使用してカスタム タイプ セーフ コレクションを実装する方法は?
クラスから派生した厳密に型指定されたコレクションを使用しましたがCollectionBase
、タイプセーフなジェネリック コレクションから継承するように変更したいと考えています。から継承することをお勧めする人もいれList<T>
ば、 を使用することをお勧めする人もいますCollection<T>
。私がやりたいことはこれです:
1) カスタム クラスがあり、そのカスタム クラスのインスタンスのみを保持するコレクションを作成しています。
2) カスタム コレクション クラスに含めたいプロパティとメソッドがいくつかあります。たとえば、Id
プロパティまたはIsBlahBlah()
メソッドが必要です。
これをどのように進める必要がありますか?CollectionBase
クラスから派生していたとき、InnerList
プロパティを使用して要素にアクセスしていました。Items
使用することを選択した場合、プロパティを使用する必要がありますCollection<T>
か?
次のようなことをしています:
正しい方法?のメソッドに干渉することなく、すぐに正しく動作しCollection<T>
ますか?
追加の質問: Google で「厳密に型指定されたコレクション」を検索すると、常にそのCollectionBase
クラスを含む結果が表示されます。厳密に型指定されたコレクションとタイプセーフ コレクションの違いは何ですか?
c# - CollectionBaseから派生したクラスのプロパティへのバインド
私はいくつかのコントロールをオブジェクトにバインドしようとしています-これは通常、かなり簡単なプロセスです。残念ながら、バインドしているオブジェクトがCollectionBaseから継承している場合、そのクラスフィールドにバインドするとエラーが発生します。
データソースのプロパティまたは列のキャプションにバインドできません。パラメータ名:dataMember
コレクションベースの継承を削除すると、この問題は解消されますが、このオブジェクトをコレクションにする必要があります。CollectionBaseにより、より高いレベルのプロパティが「バインド不能」になるようです。これを修正するためにオーバーライドできるプロパティはありますか?他のアイデアはありますか?
問題を非常に簡単に要約したこの例をオンラインで見つけました。残念ながら、この例が投稿されているのを見たすべての場所で、まだ答えを見つけていません。
コード:
c# - CollectionBase IListの実装はありませんか?
CollectionBase
抽象クラス(System.Collections
から派生IList
)でIList
メンバーが実装されていない理由を誰かが私に説明しますか?義務だと思いました。
c# - Collection クラスをリスト ボックスの項目に割り当てる
これを行うためのより簡単な方法があるはずです。コレクションに基づくクラスがあり、そのクラスは別のクラスのコレクションです。現在、クラスに新しいアイテムがあるときはいつでも、そのアイテムをリストボックスに割り当てています。コレクションクラスのすべての値をコレクションであるため、リストボックスのコレクションに割り当てる方法がわかりません。何か案は?ありがとう
わかりました、これまでに行ったことは、コレクションで使用されるクラスに tostring オーバーライドがあることです。これは、リストボックスに表示したいものです。
リストボックスの各項目に表示したいものです。
他のクラス Tansaction のコレクションを含むコレクション クラスです。現在、lstTransactions.Items.Add()、.Remove、.RemovAt などを使用してリスト ボックスにアイテムを追加し、.Add()、.Remove などを使用してコレクション クラス、トランザクションにアイテムを追加します。しかし、外部コントロールへの依存を減らし、数行のコードでのみ使用するようにしています。私は次のようなものを使用しようとしていました:
しかし、それはうまくいかないようでした。主な理由は、DataSource がどのプロパティを取得したかを把握できなかったためです。
私も試しました:
しかし、アイテムは読み取り専用であると言われました。
c# - デフォルトのメソッドを使用しないカスタム リストを作成する
独自のメソッドを使用できるように、CollectionBase から派生したリストを作成しています。これは dll プロジェクトで作成されます。このリストが使用されているときにメソッドだけが表示されるように、 CollectionBase からデフォルトのメソッドを非表示にすることが可能かどうかを知りたかっただけです。