問題タブ [readonly-collection]
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 - ReadOnlyCollection は読み取り専用ではありません。真の ReadOnlyCollection を作成するにはどうすればよいですか?
読み取り専用コレクションがリストへの追加/リストからの削除を妨げていることは承知していますが、コレクション内のオブジェクトのプロパティの設定を妨げないのはなぜですか。
この質問では、_PhoneNumbers が List であり、PersonPhoneNumber クラスのインスタンスが少なくとも 1 つ含まれていると仮定します。
オブジェクトのコレクションを公開し、オブジェクトを読み取り専用にするにはどうすればよいですか? この問題の原因は、WCF データ コントラクトでプライベート コレクションを公開する必要があることにありますが、コレクションにアクセスできるようにしたくありません。
使いたい:
それ以外の:
c# - リフレクションを使用してReadOnlyCollectionを変更することは可能ですか?
メインの接続オブジェクトがスコープ内にある限り、作成するすべてのオブジェクトへの参照を保持するSDKを扱っています。新しい接続オブジェクトを定期的に作成すると、他のリソースの問題が発生するため、オプションではありません。
必要なことを行うには、これらのオブジェクトの数千(約100,000)を反復処理する必要があります。これらのオブジェクトへの参照は確かに保持しませんが、使用しているSDKのオブジェクトモデルは反復します。これはメモリをかみ砕き、OutOfMemoryExceptionsを引き起こすのに危険なほど近づいています。
これらのオブジェクトはネストされたReadOnlyCollectionsに格納されるため、今試しているのは、リフレクションを使用して、これらのコレクションの一部をnullに設定し、ガベージコレクターが使用済みメモリを収集できるようにすることです。
numBinaries [0]のクラスメンバーの値を確認すると、nullが返されます。これは、ミッションが達成されたように見えますが、このコードを実行すると、メモリ消費量が増え続け、そうでない場合と同じように速くなります。クラスをnullに設定します。
私が理解しようとしているのは、このアプローチに本質的に欠陥があるかどうか、または私が欠落しているクラスReadOnlyCollectionへの参照を保持している別のオブジェクトがあるかどうかです。
c# - FxCop:CA1033-MicrosoftのReadOnlyCollectionの実装はこれに違反していますか?
読み取り専用コレクションのコードを見ると、「Add」メソッドはありませんが、代わりにICollection<T>.Add(T Value)
メソッドを定義しています(明示的なインターフェイスの実装)。
ReadOnlyDictionaryクラスで同様のことをしたとき、 FxCop10はCA1033を壊していると文句を言います。
ReadOnlyCollectionClass:
それで、これは誤検知ですか?Microsoftのベースコードは悪いですか?何が得られますか?
c# - MVVM - ReadOnlyObservableCollection、ReadOnlyCollection、ICollection などを公開する必要がありますか?
基本的に、私は常に、公開されている基本型をいつでも返す必要があり、内部で実装の詳細を心配する必要があることを常に理解していました。これは理にかなっています...
しかし、ここで何をすべきかわかりません。基本的に、今私は持っています:
内部的に観察可能な部分を実際に使用したり、コレクションに書き込もうとしたりすることは決してないため、それを aReadOnlyCollection<Foo>
または anとして返す必要があるかどうか疑問に思っています。ICollection<Foo>
WPFは私が返すものを気にしないようですが、それでもバインドし、コレクションが変更された通知イベントを適切にトリガーします。しかし、私はどこかで、ViewModel を処理するビューを実際に使用するようにこれを設計する必要があることを読みました。
だから私はここで少し引き裂かれています。ReadOnlyObservableCollection<T>
プロパティを使用してできることとできないことを消費ビューに明示的に伝えるには、それを のままにしておくのが最も理にかなっていると思いますが、ダウンタイプをベースタイプに減らす必要があるという印象も受けています。できる。だから私はここで何をすべきかわからない。特に、WPF は私が返す型を気にしないという事実により、それが監視可能であることがわかります。
hibernate - 休止状態の読み取り専用コレクションマッピング
このHibernateマッピングチートシートから次の多対多マッピングの例を取り上げています。
Fooにはいくつかbars
あり、Barにはいくつかありfoos
ます。Bar.foosは読み取り専用として宣言されているため、次の単純なメソッドが必要だと思います。
そしてではない:
私の推測では、その方法で一貫性を確保することはできません(にを追加し直しますFoo
)Bar
。Hibernateは、Bar.foos
を追加するたびに自動的に更新することで、この一貫性自体を保証しますかFoo.bars
、それともBar.foos
コレクションは初期化されると静的になりますか?
たとえば、これを行う場合:
の戻り値はsize()
私が期待するものになりますか?
関連するドキュメントがまだ見つからなかったので、ポインターが非常に役立ちます。
c# - IList<> から ReadOnlyCollection を返す
OK、List<> には、ReadOnlyCollection を提供する AsReadOnly() が含まれています。必要なのは、IList タイプのフィールドと、このリストの ReadOnlyCollection を返すプロパティを持つことです。
クラスの例:
シナリオは次のとおりです。項目がリストに追加されるときに、クラス内にいくつかのカスタム ロジックが必要であり、list.Add( someItem)。問題は、IList インターフェイスを必要とするNHibernateを使用しているため、IListで AsReadOnly() をキャスト/呼び出しできないことです (このメソッドは含まれていません)。
この状況を解決するには、どのような方法をお勧めしますか? NHibernate が何らかの方法で必要なコレクションを設定する方法が必要なだけですが、ユーザーを制限する必要もあります。
c# - protobuf-net: ReadOnlyCollection の逆シリアル化に失敗しました
ReadOnlyCollection
protobuf-net を使用してシリアライズおよびデシリアライズしようとしています。ただし、protobuf-net が List を ReadOnlyCollection にキャストしようとすると、デシリアライズ時に例外がスローされます。
ReadOnlyCollection
としてシリアル化/逆シリアル化するのではなく、これを保持する方法はありList
ますか? 実際のアプリケーションでは、ReadOnlyCollection
はシリアライズしたい不変オブジェクトの一部であり、ReadOnlyCollection
.
c# - ゲッターのみを使用する場合に問題が発生し、C#のリストで問題が発生する
私は、リストを使用してユーザーからの以前の推測を処理するアプリケーションに取り組んでいます。以下は、(プライベート)リストとリストにアクセスするためのプロパティです。
プライバシーの漏洩を防ぐために、ReadOnlyCollectionを使用しています。これは、プロパティにゲッターしかない理由でもあります(要素は、プロパティを介さずに、クラス内で直接リストに追加されます)。
今問題に。以下のコードはエラーメッセージを生成します:
- TheNameOfTheClass.PreviousGuesses.getは、abstractまたはexternとマークされていないため、本体を宣言する必要があります。自動的に実装されるプロパティは、getアクセサーとsetアクセサーの両方を定義する必要があります。
- タイプ'System.Collections.Generic.List'を'System.Collections.ObjectModel.ReadOnlyCollectionに暗黙的に変換することはできません。
これはどのように解決できますか?前もって感謝します!
編集:わかりました、それで問題nr 2は解決されました(Zortkunに感謝します!)。最初の問題はどうですか、私はゲッターだけを使うことができないということ、何かアイデアはありますか?
c# - ReadOnlyCollectionの違いは何ですかおよび ReadOnlyCollectionBuilder.Netで?
ReadOnlyCollection<T>
今日、私はジレンマに遭遇しました。.Netとの違いは何ReadOnlyCollectionBuilder<T>
ですか?
ReadOnlyCollection<T>
オブジェクトでは、アイテムを追加および削除できません。
オブジェクトの場合と同様に、ReadOnlyCollectionBuilder<T>
アイテムを追加および削除できます。
オブジェクト内のアイテムを追加および削除できる場合ReadOnlyCollectionBuilder<T>
、なぜ readonly という名前が付けられるのでしょうか?
c# - EntityFramework読み取り専用コレクション
顧客、会社、従業員などがContactInfoプロパティを持ち、そのプロパティに住所、電話、電子メールなどのセットが含まれているドメインについて考えてみます。
これが私の省略されたContactInfoです:
いくつかの注意事項(これらがEFの「ベストプラクティス」であるかどうかは100%わかりません):
- アドレスのコレクションは、遅延読み込みを可能にするために仮想的です
- コレクションのプライベートセッターはコレクションの交換を禁止しています
- コレクションは、
ISet
連絡先ごとに重複するアドレスがないことを保証するためのものです - 方法を使用
AddAddress
すると、プライマリであるアドレスが常に最大で1つあることを保証できます。
(可能であれば)メソッドを介してアドレスを追加しないようにし、 ...ContactInfo.Addresses.Add()
を強制的に使用したいです。ContactInfo.AddAddress(Address address)
を介してアドレスのセットを公開することを考えてReadOnlyCollection
いますが、これはEntity Framework(v5)で機能しますか?
どうすればいいですか?