6

特定のジェネリック型パラメーターが配列であることがわかっている場合、それを配列またはに変換してIEnumerableその項目を表示するにはどうすればよいですか? 例えば

public class Foo<T>
{
  public T Value { get; set; }

  public void Print()
  {
    if (Value.GetType().IsArray)
      foreach (var item in Value /*How do I cast this to Array or IEnumerable*/)
        Console.WriteLine(item);
  }
}
4

3 に答える 3

8

次のようなことを試してください:

public void Print()
{
    var array = Value as Array;
    if (array != null)
        foreach (var item in array)
            Console.WriteLine(item);
}

asキーワード:

as 演算子はキャスト操作に似ています。ただし、変換が不可能な場合、as は例外を発生させる代わりに null を返します。

于 2013-03-29T14:17:39.610 に答える
3

または、型パラメーターを制約することができます

public class Foo<T> where T : IEnumerable
{
  public T Value { get; set; }

  public void Print()
  {
      foreach (var item in Value)
        Console.WriteLine(item);
  }
}
于 2013-03-29T14:22:57.437 に答える
2

試す

foreach (var item in (object []) Value)

ただし、列挙できるという事実のみを利用するため、Value好むかもしれません

var e = Value as IEnumerable;
if (e == null) return;
foreach (var item in e) Console.WriteLine (item);

これによりカプセル化が改善され、たとえば配列からリストに切り替える場合にコードを変更する必要がなくなります。

于 2013-03-29T14:17:26.130 に答える