問題タブ [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.

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

c# - Listの読み取り専用ラッパーを返す方法望ましいですか?

たとえば、プライベートリストを持つジェネリッククラスがあります。少なくとも2つの方法で、このリストの読み取り専用ラッパーを返すようにすることができます。

両方とも、基になるコレクションの変更Values1Values2反映し、それ自体が変更されるのを防ぎます。

どちらが望ましいですか?何に注意する必要がありますか?それとも他にもっと良い方法はありますか?

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

c# - FluentNhibernate を使用してコレクションを読み取り専用でないように構成するにはどうすればよいですか?

ここで考えられることはすべて試しましたが、行き詰まっています。多くUserの がありますが、を呼び出してのフィールドにInvitationsを追加しようとすると、. マッピングのオーバーライドに何かあるような気がしますが、同じパターンに従って他のさまざまなクラス/関係があり、(これまでのところ)この問題は他の場所では発生していません。バッキング フィールドが読み取り専用である理由と、バッキング フィールドが読み取り専用にならないようにするにはどうすればよいですか?InvitationinvitationsUserAddInvitation()NotSupportedCollection is read-only

ユーザー.cs

招待.cs

データベース.cs

Manager.cs

実際の例外メッセージを取得しました (最初にこれを追加する必要がありました)

System.ThrowHelper.ThrowNotSupportedException (ExceptionResource リソース) で System.Collections.ObjectModel.ReadOnlyCollection'1.System.Collections.Generic.ICollection.Add(T 値) で NHibernate.Collection.Generic.PersistentGenericBag'1.System.Collections.Generic .ICollection.Add(T アイテム)

フィールドの招待状を変更しているにもかかわらず、アクセサー Invitations によって追加された ReadOnlyCollection ラッパーがフィールド自体を変更しているようです。

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

c# - ルックアップコレクションとアイテムを編集から保護します

これらのどれも編集可能にしたくありません。コレクションの場合、ReadOnlyCollectionを使用することは非常に明確に思えます(コレクションから常に新しいReadOnlyCollectionを作成するのに良い方法かどうかはわかりませんが(コストがかかりますか?))。

しかし、もっと重要なのは、コレクション内のアイテムをどうするかということです。このテストに合格したいのですが?

0 投票する
6 に答える
1018 参照

c# - ReadOnlyCollection vs Liskov - 可変コレクションの不変表現を正しくモデル化する方法

リスコフ置換の原則では、サブタイプがスーパータイプの契約を満たす必要があります。私の理解では、これはReadOnlyCollection<T>リスコフに違反することを伴います。 ICollection<T>のコントラクトはエクスポーズAddRemove操作を行いますが、読み取り専用サブタイプはこのコントラクトを満たしません。例えば、

不変のコレクションが必要であることは明らかです。それらをモデル化する .NET の方法に何か問題がありますか? それを行うためのより良い方法は何ですか? IEnumerable<T>少なくとも不変に見える一方で、コレクションを公開するという良い仕事をします。ただし、セマンティクスは大きく異なります。これは主にIEnumerable、状態を明示的に公開しないためです。

私の特定のケースでは、 FSMをサポートするために不変のDAGクラスを構築しようとしています。最初に/メソッドが明らかに必要ですが、すでに実行されている状態マシンを変更できるようにしたくありません。DAG の不変表現と可変表現の類似性を表現するのに苦労しています。AddNodeAddEdge

現在、私の設計では、前もって DAG Builder を使用してから、不変グラフを一度作成する必要があります。その時点で、それは編集できなくなります。Builder と具体的な不変 DAG の間の唯一の共通インターフェイスはAccept(IVisitor visitor). おそらくより単純なオプションに直面して、これが過度に設計されている/抽象的すぎる可能性があることを懸念しています。同時に、NotSupportedExceptionクライアントが特定の実装を取得した場合にスローされる可能性のあるメソッドをグラフ インターフェイスに公開できることを受け入れるのに苦労しています。これを処理する正しい方法は何ですか?

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

c# - HashSetとHashedSet(Iesi):奇妙な動作

今日、私は自分のドメインモデルでいくつかのことをテストしていましたが、その動作が期待したものではないことに気づきました。

Customers-Orders単純なモデルを作成する際に問題を切り分けようとしました。

これが私のマッピングです。

お客様:

注文:

Orderのクラスはとてもシンプルです:

これが私のCustomerクラスです:

ICollection<Order>この最初の例では、として作成されたプライベートを使用していHashSet<Order>ます。

このコードを実行すると:

INSERT顧客のとINSERT注文の2つを見ることができますが、顧客のも持っUPDATEています。

ここに画像の説明を入力してください

CustomerクラススイッチをIesiコレクションに変更した場合:

私は期待される振る舞いをしました:

ここに画像の説明を入力してください

これは私のEntityGuidクラスです:

何が起こっているのかを理解するのを手伝ってくれる人はいますか?

よろしく。

誰かが本当にコードを見てみたいと思っているなら。私はすべてをきれいにし、それを可能な限り単純にしました。ここからダウンロードできます(NH_CollectionProblems)。

NHibernate3.3.2.4000を使用しています

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

shared - 読み取り専用に近い共有リストへの非同期アクセス

PlanetInfo新しいニーズが作成されることはまれですが、発生します。作成されてPlanetInfo追加されるとInfos.planets決して削除されません。ほとんどの場合、Infos.planets実際には読み取り専用です。

のインスタンスを持つ多くのスレッドがありFoo、それらはすべてオブジェクトへのポインタを必要としPlanetInfoます。ご覧のとおり、internal_getPlanetInfo同期されています。

コードを変更できるかどうか疑問に思うので目的のPlanetInfo. 最初の試行はAsynchronouslyになり、(見つからない場合は) 2 回目はsynchronouslyになります。そう... メソッドgetPlanetInfoは、メソッドと同じ for ループを変更しますinternal_getPlanetInfo。したがって、ほとんどの場合、スレッドは互いにロックしません。

私が念頭に置いているのは、スレッドには の「古い」コピーがある可能性があるということInfos.planetsですこの「古い」コピーの唯一の潜在的な問題は、しばらくしてから追加された項目が失われることです。そのため、目的のアイテムが見つからない場合は、 「マスター」コピーを使用して探します。

コメントをいただければ幸いです。

私がやります。

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

c# - エラーが発生するのはなぜですか:「System.Collections.Generic.List 型を暗黙的に変換できません」

次の封印されたクラスがあります。リストを として返そうとしていReadOnlyCollectionます。いくつかのことを試しましたが、私はこれのこつを得ていません。では、リストを読み取り専用コレクションに返す、またはキャストするにはどうすればよいでしょうか。

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

c# - 読み取り専用の int 配列を更新しますか?

古典的な意味では、読み取り専用オブジェクトはコンストラクターでのみ設定でき、後で変更することはできません。読み取り専用の int 配列の動作が異なるのはなぜですか。

PS:私はReadonlyコレクションを認識しています。なぜこれが許可されているのか知りたいのですが?

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

c# - IXmlSerializable を実装せずに読み取り専用コレクションをシリアル化する

私はクラスを持っています:

XmlSerializer を使用して XML でシリアル化したいのですが、FxCop にも準拠する必要があります。問題は、FxCop がプロパティの読み取り専用コレクションのみを公開したいということですが、もちろん ReadOnlyCollection はシリアル化できません。IXmlSerializable は面倒なので実装したくありません。他の解決策はありますか?