Я пытаюсь сделать расширение типа для MongoDB C# Driver, который вернет тип параметра вместо null при попытке выполнить запрос, который дает 0 результатов.Разрешение нулей на тип записи F #
Я столкнулся с несколькими проблемами в пути, но сейчас на пути есть только одна вещь.
Вот код
[<Extension>]
type Utils() =
[<Extension>]
static member inline tryFindOne(x: MongoCollection<'T>, query) =
match x.FindOne(query) with
| null -> None
| value -> Some value
[<CLIMutable>]
type Entity =
{ Id : ObjectId; Name : string }
static member Create(name) =
{ Id = ObjectId(); Name = name }
Проблема, конечно, в том, что тип записи Entity
в F # компилятор не соответствует типу ограничения метода расширения ('T : null
), но я должен иметь contraint чтобы иметь возможность сопоставить шаблон с нулями. Конечно, это своего рода бессмысленная вещь, потому что тип Entity
очень «обнуляется» для целей взаимодействия и будет возвращен как null, когда вы пытаетесь запросить коллекцию MongoDB, которая дает 0 результатов. Я попытался установить атрибут [<AllowNullLiteral>]
, но, к сожалению, он работает только с классами. Так увы, я застрял, я мог бы сделать Entity
в класс вместо этого, но я думаю, что записи более идиоматичны F #.
Да, это будет работать. Это немного фанковое решение, но оно работает. Благодаря! –
ReferenceEquals (null, entity) также может работать. – FuleSnabel