Я определяю следующее расширение типа:
type System.Reflection.MemberInfo with
member x.GetAttribute<'T when 'T :> Attribute>(required, inherit') =
match required, Attribute.GetCustomAttribute(x, typeof<'T>, inherit') with
| true, null -> invalidOp (sprintf "Missing required attribute: %s" typeof<'T>.FullName)
| _, attr -> attr :> 'T
Последнее выражение соответствия (attr :> 'T
) выдает ошибку:
Статическое приведение от атрибута к 'T имеет неопределенный тип, основанный на информации, предшествующей этой точке программы. Статические принуждения не допускаются на некоторых типах. Необходимы дополнительные аннотации типов.
Я пытался аннотировать возвращаемый тип функции, но получил тот же результат. Я не хотел бы изменить это на динамический бросок. Есть ли способ заставить статическое приведение работать?