я определяю следующее расширение типа:Где «неопределенный тип»?
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 включает неопределенный тип на основе информации, предварительной к этой программной точке. Статические принуждения не допускаются к некоторым типам. Нужны дополнительные аннотации.
Я пробовал аннотировать возвращаемый тип функции, но получил тот же результат. Мне не хотелось бы менять это на динамический бросок. Есть ли способ сделать статическую работу?
Я полагаю, что так. Я думаю, что меня сбросил аналогичный код на C#, где динамические и статические роли имеют одинаковый синтаксис. Это тоже должно быть динамическое кастинг на C#. – Daniel