2016-08-18 25 views
0

にプリミティブ型のリストをキャストするには、オブジェクトをIEnumerable<object>にキャストする必要があります。私は、そのオブジェクトについて知っているすべては、それがリスト(Type.IsGenericType)であること、である:全てのクラスは、オブジェクトから継承するよう私のC#プログラムでIEnumerable <object>

IEnumerable<object> iEnu = myObject as IEnumerable<object>; 

if (iEnu != null) 
    foreach (object o in iEnu) 
    // do stuff 

限り、リストの種類がprimitivないとして、それは、正常に動作します。しかし、プリミティブはそうではありません。したがって、IEnumerable<object>へのキャストはnullを返します。 IEnumerable<int>にキャストする必要があります。整数リストの場合は、ブール値などのリストの場合はIEnumerable<bool>にキャストする必要があります。当然のことながら、私はただ1つのジェネリックキャストを望む。

プリミティブリストを取得するにはどうすればよいですか?

+0

なぜ、すべてのケースのために 'IEnumerable'を使用しない代わりに、オブジェクト – prizm1

+1

のダイナミックな 'タイプ' を使用してみては? – Maarten

+0

@Maarten:これが動作することを知らなかったため、P @ prizm1:ダイナミックでは機能しません 回答と解決策をありがとう。 – Aaginor

答えて

4

IEnumerable<object>の代わりにIEnumerableを使用してください。 int[]IEnumerable<object>を実装していませんが、それはIEnumerableを実装ん:

IEnumerable enumerable = myObject as IEnumerable; 

if (enumerable != null) 
{ 
    foreach (object o in enumerable) 
    { 
     // do stuff 
    } 
} 
1

あなたは本当にただIEnumerableを使用するオブジェクトで作業したい場合。しかし、具体的なタイプのIEnumerableにオブジェクトをキャストする必要がある場合は、Enumerable.Cast<T> Linq拡張メソッドを使用することができます。

msdn Enumerable.Cast

Object obj = new int[] { 1, 2, 3, 4 }; 
IEnumerable collection = obj as IEnumerable; 
IEnumerable<int> integers = collection.Cast<int>(); 
foreach(int i in integers) 
    System.Console.WriteLine(i); 
関連する問題