2011/07/06(Wed) 09:22:25 編集(投稿者)
■No60501 (ash さん) に返信
> この部分が理解できませんでした。
>
> コレクションを作成するクラス(今回の場合はMyClass)のメンバがgetのみ公開の場合に、
> DynamicかReflectionでメンバをsetすることができるということでしょうか?
class MyClass
{
public int hoge { get; set; }
}
ジェネリック未使用
class MyClassList
{
private List<MyClass> list;
public int hoge(int index)
{
return list[index].hoge;
}
public MyClassList(List<MyClass> listArg)
{
list = listArg;
}
}
ジェネリック使用
public class MyList<T>
{
private List<T> list;
public T2 GetValue<T2>(int index, string Name)
{
T itm = list[index];
この辺がReflection(using System.Reflection;が必要です)
Type tp = typeof(T);
PropertyInfo prp = tp.GetProperty(Name);
return (T2)(prp.GetValue(itm, null));
}
public MyList(List<T> listArg)
{
list = listArg;
}
}
呼び出し:
List<MyClass> list = new List<MyClass> { new MyClass { hoge = 1 },
new MyClass { hoge = 2 },
new MyClass { hoge = 3 } };
MyList<MyClass> list2 = new MyList<MyClass>(list);
int a = list2.GetValue<int>(0,"hoge");
MyClassList list3 = new MyClassList(list);
int b = list3.hoge(1);