リフレクションで遊んでみましたが、次のような状況に遭遇しました。
IEnumerable<>
次のコードでは、「obj」の型がorICollection<>
またはであると仮定しましょうIList<>
。
コレクションを列挙し、リフレクションを使用して個々のアイテムを書きたいように、この System.Object をIEnumerable<>
常に (とにかく継承しICollection<>
て) キャストしたいと思います。IList<>
IEnumerable<>
この背後にある動機は、シリアライザーが一般的にデータをシリアル化する方法を確認しようとしているだけなので、リフレクションも理解できるようにその状況をシミュレートしようとしています。
オブジェクトを非ジェネリック IEnumerableにキャストすることを考えましたが、実際のインスタンスを言うと、オブジェクトの不要なボックス化が発生すると思いましたIEnumerable<int>
...私は正しいと思いますか?
private void WriteGenericCollection(object obj)
{
Type innerType = obj.GetType().GetGenericArguments()[0];
//Example: IEnumerable<int> or IEnumerable<Customer>
Type generatedType = typeof(IEnumerable<>).MakeGenericType(innerType);
//how could i enumerate over the individual items?
}