C# 如何从类型构建泛型类型?

C# 如何从类型构建泛型类型?,c#,generics,reflection,types,C#,Generics,Reflection,Types,有没有办法构建这样的泛型类型 Type underlyingType = propertyInfo.PropertyType; Type genericType = typeof(Action<underlyingType>); 我能够做到这一点,无论我如何调用DynamicInvoke,它似乎都很慢 var ptype = propertyInfo.PropertyType; var defaultVal = ptype.IsValueType ? Activator.Creat

有没有办法构建这样的泛型类型

Type underlyingType = propertyInfo.PropertyType;
Type genericType = typeof(Action<underlyingType>);

我能够做到这一点,无论我如何调用
DynamicInvoke
,它似乎都很慢

var ptype = propertyInfo.PropertyType;
var defaultVal = ptype.IsValueType ? Activator.CreateInstance(ptype) : null;
var type = Type.GetType($"System.Action`1[{ptype}]");
var setter = prop.GetSetMethod(true).CreateDelegate(type, this);
var resetter = new Action(() => setter.DynamicInvoke(defaultVal));
return resetter;
所以这种方法可能更好

var ptype = propertyInfo.PropertyType;
var defaultVal = ptype.IsValueType ? Activator.CreateInstance(ptype) : null;
var resetter = new Action(() => propertyInfo.SetValue(this, defaultVal));

我能够做到这一点,无论我如何调用
DynamicInvoke
,它似乎都很慢

var ptype = propertyInfo.PropertyType;
var defaultVal = ptype.IsValueType ? Activator.CreateInstance(ptype) : null;
var type = Type.GetType($"System.Action`1[{ptype}]");
var setter = prop.GetSetMethod(true).CreateDelegate(type, this);
var resetter = new Action(() => setter.DynamicInvoke(defaultVal));
return resetter;
所以这种方法可能更好

var ptype = propertyInfo.PropertyType;
var defaultVal = ptype.IsValueType ? Activator.CreateInstance(ptype) : null;
var resetter = new Action(() => propertyInfo.SetValue(this, defaultVal));
您可以使用:

您可以使用:


非常好和干净的方法。我将把这个标记为答案,因为它自己回答了这个问题。(现在我想问的另一个问题是
DynamicInvoke
更好或者
SetValue
或者有没有更好的方法。)非常好而且干净的方法。我将把这个标记为答案,因为它自己回答了这个问题。(现在我想问的另一个问题是
DynamicInvoke
更好还是
SetValue
或者有没有更好的方法。)
Type underlyingType = propertyInfo.PropertyType;
Type genericType = typeof(Action<>).MakeGenericType(underlyingType);
Delegate = Delegate.CreateDelegate(genericType, targetMethodInfo);