Универсальный экземпляр класса с типом из PropertyInfo.PropertyType
У меня есть классы, как показано ниже:
public class SampleClassToTest<T>
{
public static Fake<T> SomeMethod(string parameter)
{
// some code
}
public static Fake<T> SomeMethod(string parameter, int anotherParameter)
{
//some another code
}
}
public class Fake<T>
{
// some code
}
И я хочу использовать их таким образом:
SampleClassToTest<MyClass>.SomeMethod("some parameter");
Проблема, которая у меня есть, заключается в следующем: тип "MyClass" я могу получить только из экземпляра PropertyInfo, используя Reflection, поэтому я имею
Type propertyType = propertyInfo.PropertyType;
Как я могу это сделать? Есть идеи?
UPD. Я пытаюсь передать тип универсального метода. И да, это то, что я хочу.
2 ответа
Решение
Вам нужно будет сделать:
typeof(SampleClassToTest<>).MakeGenericType(propertyType)
.GetMethod("SomeMethod", new Type[] {typeof(string)})
.Invoke(null, new object[] {"some parameter"});
Некрасиво.
Если это вообще поможет, я бы посоветовал предложить неуниверсальный API, который принимает Type
пример; хорошая вещь здесь - то, что универсальный API может вызывать в неуниверсальный API тривиально, используя typeof(T)
,
Похоже, вы хотите:
Type propertyType;
Type classType = typeof(SampleClassToTest<>).MakeGenericType(propertyType);
MethodInfo method = classType.GetMethod("SomeMethod", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(string) }, null);
object fake = method.Invoke(null, new object[] { "some parameter" });