問題タブ [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.
c# - 読み取り専用コレクションとは何ですか?
セキュリティ コード アナリストを実行したところ、CA2105 警告が表示されました。成績改ざんの例を見ました。int[] を読み取り専用の int に割り当てることができることに気づきませんでした。readonly は C++ の const のようなもので、違法だと思っていました。
違反を修正する方法では、オブジェクトのクローンを作成する (これはやりたくない) か、「変更できない厳密に型指定されたコレクションで配列を置き換える」ことを提案しています。リンクをクリックすると、「ArrayList」が表示され、各要素が 1 つずつ追加されますが、さらに何かを追加するのを防ぐことはできないようです。
では、このコードを取得した場合、それを読み取り専用のコレクションにする最も簡単または最良の方法は何ですか?
c#-3.0 - FxCopCA2227警告およびReadOnlyCollection
私のVS2008SP1、.NET 3.5 SP1プロジェクトには、さまざまなプロパティを含むさまざまなクラスがあります。私はC#3.0の自動プロパティをよく使用します。
これらのプロパティの一部はコレクションである必要があります。シンプルにしたいのでReadOnlyCollection<T>
、これらのプロパティに使用します。
IEnumerable<T>
要素にランダムにアクセスしたいので、使用したくありません。
コード分析(FxCopルール)を使用すると、CA2227警告が表示されます。
ReadOnlyCollection<T>
変更できないのにsetメソッドが必要な理由がわかりません...setメソッドは、プロパティが実行できることを正確に実行することしかできません。
例:
CA2227:Microsoft.Usage:プロパティセッターを削除して、「MyClass.SomeNumbers」を読み取り専用に変更します。C:\ Users ... \ Visual Studio 2008 \ Projects \ CA2227 \ MyClass.cs 7 CA2227
c# - List および ReadOnly プロパティ
List (および List) インスタンスは、ReadOnly プロパティを参照して読み取り専用にすることができます。コレクションにプロパティ ReadOnly プロパティがある場合、メソッドは例外をスローします。
読み取り専用の List インスタンスを作成するにはどうすればよいですか? 主な用途は何ですか?
c# - バイト配列を読み取り専用で渡すには?
次のコードを考えてください。
C#でバイト[]を読み取り専用で渡す方法はありますか? コピーは解決策ではありません。メモリを無駄にしたくありません (ファイルが非常に大きくなる可能性があるため)。パフォーマンスを覚えておいてください!
c# - C#のメソッドを介してコレクションに追加を強制するためのパターン
コレクションメンバーのいるクラスがあります。メソッド(適切な検証などを実行できる)を使用する代わりに、外部コードがこのコレクションを直接変更しないようにしたいと思います。
これは思ったより難しいです。これが私が使用している解決策です。この一般的なことを行うためのより良い方法があるかどうか教えていただけますか?それはすべて少し過剰に設計されているようです。
nhibernate - NHibernate が操作できる読み取り専用のコレクション プロパティ
私のドメイン クラスには、次のようなコレクションがあります。
これにより、クラス内から (フィールド _foos を使用して) 変更できる読み取り専用コレクションが得られます。
このコレクションは次のようにマッピングされます (Fluent NHibernate):
このコレクションを使用しようとすると、次のようになります。
タイプ 'NHibernate.Collection.Generic.PersistentGenericBag 1[Foo]' to type 'System.Collections.Generic.List
1[Foo]' のオブジェクトをキャストできません。
Unable to cast object of type NHibernate.Collection.Generic.PersistentGenericBag to Listによると、NHibernate が独自のコレクション クラスの 1 つを注入できるように、コレクションをインターフェイスとして NHibernate に公開する必要があるためです。
この記事では、代わりに IList を使用することを提案していますが、残念ながら、このインターフェイスには AsReadOnly() メソッドが含まれていないため、読み取り専用コレクションのみを外部に公開するという私の計画が台無しになります。
代わりに使用できるインターフェイス、同じ要件を満たす別のアプローチ、またはそれほどフラストレーションを伴わない別のキャリアを提案できる人はいますか?
ありがとう
デビッド
c# - C#、SynchronizedReadOnlyCollection およびそのコンストラクター
.net クラス SynchronizedReadOnlyCollection には 4 つのコンストラクターがあります。
パラメーターなしのコンストラクターとロック オブジェクトのみのコンストラクターの使用法は何ですか? コレクションを作成するときにコレクションを埋めないと、コレクションは常に空になりますか? 私は何かが恋しいですか?
nhibernate - NHibernate:コレクションタイプとしてIEnumerableを使用すると、エラーが発生します
以下のように、コレクションタイプとしてISetを使用するクラスがあります。
コレクション自体を外部から変更できるようにしたくありません。ただし、以下のようにプロパティのタイプをIEnumerableに変更すると、次のようになります。
次に、このクラスを使用しようとすると、NHibernateエラーが発生します。
System.InvalidCastException:タイプ'NHibernate.Collection.Generic.PersistentGenericBag1 1[Kctc.BusinessLayer.ProbateAssist.Entities.Contact]' to type 'Iesi.Collections.Generic.ISet
[Kctc.BusinessLayer.ProbateAssist.Entities.Contact]'のオブジェクトをキャストできません。
何が得られますか?コレクションの公開バージョンを読み取り専用にするにはどうすればよいですか?
注意:ReadOnlyCollectionも使用しようとしましたが、同じエラーが発生します。
c# - ReadOnlyCollection が Add メソッドと Remove メソッドを非表示にする方法
ReadOnlyCollection<T>
ICollection<T>
AddやRemoveなどのメソッドを持つインターフェースを実現。属性を使用して Intellisense からメソッドを非表示にする方法は知っていますが、これらのメソッドを使用しようとすると実際にコンパイル エラーが発生する可能性はありますか?
(ちなみに、ROC で Add と Remove を呼び出すのは意味がないことはわかっています。これは、正しいデータ構造を使用することではなく、継承されたメンバーのコンパイル エラーを引き起こすことに関する問題です)。
c# - リストはどうですかReadOnlyリストでコンストラクター関数をコピーしますか?
MSDNの記事では、これについて実際には説明されていません。