Чтобы добавить пояснения к ответам Деско и Брайана - добавление box
необходимо, когда статический тип значения obj1
не обязательно должен быть ссылочным типом .NET.
Если типиз obj1
равно obj
(введите псевдоним для System.Object
), тогда вы можете использовать сопоставление с образцом без каких-либо ограничений, поскольку компилятор уже знает, что у вас есть ссылочный тип:
let obj1 : obj = upcast (...)
match obj1 with
| :? ISomeInterface -> (do something)
Случай, когда выbox
нужен, когда тип obj1
является параметром универсального типа.В этом случае ваша функция может вызываться как с типами значений, так и с ссылочными типами.Добавление box
гарантирует, что вы выполняете проверку типа для ссылочного типа (а не для типа значения, что невозможно).