Как найти тип возврата метода с System.Reflection.MethodBase в C #? - PullRequest
24 голосов
/ 22 марта 2010

как узнать тип возврата метода из MethodBase? Я использую PostSharp и пытаюсь переопределить метод CompileTimeValidate (метод MethodBase), чтобы убедиться, что атрибут применяется к методу с правильной подписью.

Спасибо

Ответы [ 4 ]

21 голосов
/ 22 марта 2010

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

CompileTimeValidate(MethodBase method) {
  var normalMethod = method as MethodInfo;
  if( normalMethod != null) {
    ValidateReturnType(normalMethod.ReturnType);
  }
}
19 голосов
/ 22 марта 2010

MethodBase используется в качестве базового класса MethodInfo , который имеет свойство ReturnType .

Вы можете попытаться привести к экземпляру MethodInfo и проверить это свойство.

1 голос
/ 22 марта 2010

Попробуйте что-нибудь подобное. MethodInfo имеет свойство, но MethodBase используется и для конструкторов, и у них нет возвращаемого типа.

MethodBase b = this.GetType().GetMethods().First(); 
if(b is MethodInfo)
    MessageBox.Show((b as MethodInfo).ReturnType.Name);
0 голосов
/ 22 марта 2010

Попробуйте свойство MethodInfo.ReturnType.

Чтобы получить свойство возвращаемого типа, сначала получите Type. Из Type получите MethodInfo. Из MethodInfo получите ReturnType.

Кажется, что вы не можете сделать это с MethodBase ...

http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.returntype.aspx

...