0
Я пытаюсь написать версию «TryGetValue» с опциональной версией, которая будет работать на любом объекте, который реализует IDictionary или IReadOnlyDictionary. У меня есть это:Статическое ограничение по элементу
let inline contains (key:^key) (dictionary:^dic)=
(^dic: (member ContainsKey: ^key -> bool) (dictionary, key))
let inline tryGetValue (dictionary:^dic) (key:^key)=
if contains key dictionary then
let value = (^dic : (member get_Item: ^key -> ^value) (dictionary, key)) (dictionary)) key
value |> Some
else None
Определение «значение» выдаст предупреждение, что ограничения членов с именем get_Item имеют особый статус, который может привести к ошибкам во время выполнения. Что я должен здесь делать?
Я начал так, и это было именно то, «Unchecked.defaultof <^value>» или точнее мой, не зная, что это было, что заставило меня остановиться. Не будет ли много типов, которые вызовут исключение, потому что у них нет значения по умолчанию? – MatthewJohnHeath
@MatthewJohnHeath Все типы имеют значение по умолчанию, оно равно null для ссылочных типов, а значение по умолчанию для структуры - это значение, созданное путем установки всех полей типа значения в их значение по умолчанию, а все поля ссылочного типа равны null. – TheInnerLight