PexChoose неуниверсальные методы - PullRequest
0 голосов
/ 03 октября 2011

Есть ли способ указать тип возвращаемого значения для PexChoose во время выполнения?Например, PexChoose.Value (name, Type)?

Это было бы полезно для создания общих моделей, которые генерируют значения различных типов в зависимости от ограничений времени выполнения.

1 Ответ

0 голосов
/ 13 января 2012

Вы можете создать свой собственный вспомогательный класс, который будет вызывать универсальную версию через отражение.

Например, чтобы создать неуниверсальную версию PexChoose.Value(string name)

public static class MyPexChoose
{
    public static object Value(Type myType, string name)
    {
        // Find the PexChoose.Value() method which has a single string parameter
        MethodInfo method = typeof(PexChoose).GetMethod("Value", new Type[1] {typeof(string)});
        // Make and invoke the generic version of it
        MethodInfo generic = method.MakeGenericMethod(myType);
        return generic.Invoke(typeof(PexChoose), new object[1] { name });
    }        
}

Тогда звонок

MyPexChoose(typeof(DateTime), "MyChosen");

эквивалентно

PexChoose<DateTime>("MyChosen");
...