[トピック内 6 記事 (1 - 6 表示)] << 0 >>
■No63550 (li- さん) に返信 > で判定できましたが、object型のxの展開ができずに困っています。 > 最終的にPropertyInfoなどでGetValueで渡したいので、List<object>としたいのですが、どうしたら良いでしょうか? <int> や <HogeClass> の部分を得たいなら、x.GetType().GetGenericArguments() で得られます。 そうではなく、List<不明>型を List<object> にしたいという話だとしたら、 そもそもキャストできませんから、何かしらの変換が必要ですね。 変換ということで List<T>.ConvertAll<object> を呼ぶ…と言いたいところですが、 IList か IEnumerable にキャストして List<object> に詰め直した方が早いかな。 List<object> result = null; if (x.GetType().GetGenericTypeDefinition() == typeof(List<>)) { result = new List<object>(); foreach (object o in (IList)x) { result.Add(o); } }
■No63553 (渋木宏明 さん) に返信 > is 演算子を使いましょう。 ごめんなさい、List<> に対して is は使えないみたいですね。 .NET Framework 4.0 以降では共変が使えるので、object 型として列挙できるだけでいいなら var obj = (object)new List<string>(); var enumerable = obj as IEnumerable<object>; if (enumerable != null) { foreach(var item in enumerable) { // item に対する操作 } } のように、簡潔に書くことができます。
管理者用
- Child Tree -