Универсальный экземпляр класса с типом из 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" });
Другие вопросы по тегам