我不理解这里需要动态。我很确定你可以用泛型做你需要的事情。
编辑:如何通过反射调用泛型方法:
static void Main(string[] args)
{
var hs1 = new HashSet<SomePrivateClass>();
CallClear(hs1);
}
public static void CallClear(object objectThatIsAHashSet)
{
var method = typeof(Program).GetMethod("Clear", BindingFlags.Public | BindingFlags.Static);
var hsGenericType = objectThatIsAHashSet.GetType().GetGenericArguments()[0];
var genericMethod = method.MakeGenericMethod(hsGenericType);
genericMethod.Invoke(null, new[] {objectThatIsAHashSet});
}
private class SomePrivateClass { }
public static void Clear<T>(HashSet<T> hs)
{
hs.Clear();
}
编辑2:为什么它不适用于dynamic。
基本上,dynamic只允许访问类型的公共成员。因此,它不能用于调用私有成员或私有类型。基本规则是,如果不能使用某个代码段中的方法的类型来引用该方法,则不能使用dynamic来访问它(即,不能使用dynamic来破坏封装)。