読者です 読者をやめる 読者になる 読者になる

ゆるふわで雑な日記

Microsoft系の技術情報を中心にゆるふわに綴っていく予定です

とっくに言い尽くされているけど、改めて今言いたいこと…

.NET C#

単にIListってどう使うべき? っていう話なんですけどね(言い尽くされている) 今かかわている案件(コードは書いていない)で(共通部分や業務FWに)結構使われているんだけど、 どうも使っている方がIListを理解していない感が… お使いになっている言語はC#(一部VB)ですよと(他の言語のことはあまり知らないので)いうお話

まず、C#でforeachをするだけならばIListを使う必要はないですよね? 実体が必要ならIReadOnlyCollection、遅延評価ならIEnumerableで良いわけで となると、作成者の意思としてはAdd()とかの操作系の処理をしたいのか?と思うんだけどやっていない… じゃ、Add()(Remove()でも良いけど)していればよいのか?と言われればそれはそれで微妙なことがあって、 IsReadOnlyとIsFixedを確認しないで実行すると例外(まあMethod localな変数なら心配ないですが) 例を挙げると [csharp] private vold DoSometing(IList<string> somethingList) { somethingList.Add("1"); //ここで実行時例外(NotImplementedException)!! } [/csharp] みたいなコードが外部DLLに記述されていたとすると、以下のコードは実行時例外なわけですよ [csharp] static vold Main(string[] args) { DoSometing(args); } [/csharp] 回避するには、 [csharp] private vold DoSometing(IList<string> somethingList) { if(somethingList == null || somethingList.IsReadOnly || somethingList.IsFixed) return; somethingList.Add("1"); } [/csharp] とかやってやらないといけないんですけどそうなってはいない… 更なる問題は、そこから展開されて各所に(不要な)IListが蔓延し… いっそ禁止にしてしまってとか悩んでいる今日この頃… どうしたらいいですか?誰か教えてください。