Код: Выделить всё
static object GetZero(Type t)
{
// If t implements INumberBase, then return INumberBase.Zero
// Otherwise, throw some arbitrary Exception
}
Код: Выделить всё
static object GetZero(Type t)
{
return t
.GetInterfaces()
.Single(x => x.IsGenericType && !x.IsGenericTypeDefinition && x.GetGenericTypeDefinition() == typeof(INumberBase))
.GetProperty("Zero", BindingFlags.Public | BindingFlags.Static)
.GetValue(null);
}
System.BadImageFormatException : Bad IL-формат.
в System.Reflection.MethodInvoker.Invoke( Object obj, IntPtr* args, BindingFlags ignoreAttr)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags вызоваAttr, связыватель Binder, параметры Object[], культура CultureInfo)
at System.Reflection.PropertyInfo.GetValue(Object obj)
Почему эта реализация выдает ошибку?
Есть ли другой способ реализовать это через отражение?
Изменить:
Я могу обойдите эту проблему, добавив статический метод следующим образом:
Код: Выделить всё
static T Zero() where T : INumberBase
{
return T.Zero;
}
Подробнее здесь: https://stackoverflow.com/questions/760 ... reflection
Мобильная версия