4

我有如下课程:

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");

我遇到的问题如下:我只能使用反射从 PropertyInfo 实例中获取“MyClass”类型,所以我有

Type propertyType = propertyInfo.PropertyType;

我怎样才能做到这一点?有任何想法吗?

UPD。 我正在尝试将 Type 传递给泛型方法。是的,这就是我想要的。

4

2 回答 2

3

你需要做:

typeof(SampleClassToTest<>).MakeGenericType(propertyType)
       .GetMethod("SomeMethod", new Type[] {typeof(string)})
       .Invoke(null, new object[] {"some parameter"});

丑陋。

如果有帮助Type话,我建议提供一个接受实例的非通用 API ;这里的好处是通用 API 可以通过使用typeof(T).

于 2013-03-15T13:04:40.060 回答
2

看起来你想要:

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" });
于 2013-03-15T13:04:54.617 回答