LINQ その4

 IEnumerableが基本になる。

 これにあわせて、受け渡しの方法を変える。

class Hoge<T>
{
  //内部で持つのはT[]
  public T[] Array{ get; private set; }

  //もらうときはIEnumerable<T>
  public Hoge(IEnumerable<T> enumerable)
  {
    Array = enumerable.ToArray();
  }
}

class Program
{
  static void Main()
  {
    Derived[] derived = DerivedArray();

    //IEnuemrable<Base>を取るところにDerivedの配列を突っ込む
    Hoge<Base> hoge = new Hoge<Base>(derived);
  }
  ...
}

 さっき気づいたのだけど、IEnumerable<Base>にDerived[]を突っ込んでも全く問題がない。

 これによって、受け取る型は全てのコレクションがOKになり、何を突っ込んでもコピーされるので副作用の心配もなくなる。

 IEnumerableを渡したいときは、

  static void Main()
  {
    IEnumerable<Derived> derivedEnumerable = DerivedEnumerable();
    //一回配列にする
    Derived[] derived = derivedEnumerable.ToArray();

    //IEnumerable<Base>を取るところにDerivedの配列を突っ込む
    Hoge<Base> hoge = new Hoge<Base>(derived);
  }

ToArrayが二回必要になってしまう。そのくらいガマンするべきだ。

 ヘジはこうしろといいたかったのか。どうも俺は基礎がなってないな。最初からこうしときゃよかった。