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

私が抱えている問題は次のとおりです。「MyClass」のタイプは、Reflectionを使用してPropertyInfoインスタンスからのみ取得できるため、

Type propertyType = propertyInfo.PropertyType;

これどうやってするの?何か案は?

アップデート。 Type をジェネリック メソッドに渡そうとしています。そして、はい、これは私が欲しいものです。

4

2 に答える 2

3

あなたがする必要があります:

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

醜い。

少しでもお役に立てれば、Typeインスタンスを受け入れる非ジェネリック API を提供することをお勧めします。ここでの良い点は、ジェネリック 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 に答える