Как получить неуниверсальную информацию о методах приведения? - PullRequest
0 голосов
/ 21 февраля 2012

У нас есть унаследованное приложение, у которого есть такой класс:

public class Person
{
private PersonType _type;

public PersonType GetPersonType()
{
return _type;
}
}

PersonType - это базовый класс нескольких типов людей (Пользователь, Клиент и ...)

, поэтому каждыйраз, когда мы хотим, чтобы тип сделал что-то с ним, мы должны привести его следующим образом:

var userType=(User)Person.GetPersonType();

Тогда я подумал, что, может быть, у нас может быть общая перегрузка, подобная этой:Поэтому я добавил перегруженный метод в класс.Позже я обнаружил, что есть другой код, который использует отражение, чтобы получить первый метод:

var methodInfo=person.GetType().GetMethod("GetPersonType");

, но так как я добавил эту перегрузку, мы получаем неоднозначное исключение метода. Я попытался найти способ как-то отличитьточная перегрузка, которую я искал безуспешно.Итак, вопрос в том, как мы можем получить неуниверсальную информацию о перегрузке?(Как я уже сказал, это устаревшее приложение, созданное с использованием framework 2, и мы не можем использовать Linq и \ или Extensions.)

1 Ответ

1 голос
/ 21 февраля 2012

Вы можете сказать, какой метод является первым неуниверсальным, например:

MethodInfo[] methods = person.GetType().GetMethods();
foreach (MethodInfo mi in methods)
    if (mi.Name == "GetPersonType" && !mi.IsGenericMethodDefinition)
        return mi;
...