単に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が蔓延し…
いっそ禁止にしてしまってとか悩んでいる今日この頃…
どうしたらいいですか?誰か教えてください。