мне нужно использовать метод, как:Как получить класс типа
DoSomething<(T)>();
Но я не знаю, какой тип у меня есть, только объект класса типа. Как я могу назвать этот метод, если у меня есть только:
Type typeOfGeneric;
мне нужно использовать метод, как:Как получить класс типа
DoSomething<(T)>();
Но я не знаю, какой тип у меня есть, только объект класса типа. Как я могу назвать этот метод, если у меня есть только:
Type typeOfGeneric;
Если у вас есть только Тип, указанный как Тип, вам нужно будет создать общий метод и вызвать его через отражение.
Type thisType = this.GetType(); // Get your current class type
MethodInfo doSomethingInfo = thisType.GetMethod("DoSomething");
MethodInfo concreteDoSomething = doSomethingInfo.MakeGenericMethod(typeOfGeneric);
concreteDoSomething.Invoke(this, null);
Вы можете использовать отражение (при условии DoSomething()
статичен):
var methodInfo = typeOfGeneric.GetMethod("DoSomething");
methodInfo.Invoke(null, null);
EDIT: Ваш вопрос изменения в то время как я написал ответ. Выше код для необщего метода, здесь для общего класса:
var constructedType = someType.MakeGenericMethod(typeOfGeneric);
var methodInfo = constructedType.GetMethod("DoSomething");
methodInfo.Invoke(null, null);
А вот для статического универсального метода на необщего класс:
var typeOfClass = typeof(ClassWithGenericStaticMethod);
MethodInfo methodInfo = typeOfClass.GetMethod("DoSomething",
System.Reflection.BindingFlags.Static | BindingFlags.Public);
MethodInfo genericMethodInfo =
methodInfo.MakeGenericMethod(new Type[] { typeOfGeneric });
genericMethodInfo.Invoke(null, new object[] { "hello" });
I Думаю, ты не понял мой вопрос. Как передать объект типа как общий параметр? – wassertim
Ваш вопрос не очень ясен. Не могли бы вы привести более конкретный пример? –
Нам потребуются более подробные сведения ... возможно, пример кода или два помогут. –
@ Jon Skeet, действительно, вы не можете редактировать мужскую почту, пытаясь прояснить ее, как вы ее себе представляете, И жалуются, что сообщение не ясное ... :-) –