Вы хотите вызвать DoStuff с T = типом каждого свойства? В этом случае, «как есть», вам нужно будет использовать рефлексию и MakeGenericMethod - т.е.
var properties = this.GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
object value = typeof(MyClass)
.GetMethod("DoStuff")
.MakeGenericMethod(p.PropertyType)
.Invoke(null, new object[] { p.Name });
p.SetValue(this, value, null);
}
Однако, это не очень красиво. На самом деле мне интересно, не лучше ли иметь:
static object DoStuff(string name, Type propertyType);
... and then
object value = DoStuff(p.Name, p.PropertyType);
Что дженерики дают вам в этом примере? Обратите внимание, что во время вызова отражения типы значений будут по-прежнему упаковываться и т. Д. Даже тогда бокс не так плох, как вы думаете .
Наконец, во многих сценариях TypeDescriptor.GetProperties () более подходит, чем Type.GetProperties () - допускает гибкие объектные модели и т. Д.