Технически говоря, функция F # Unchecked.defaultof<'a>
является эквивалентом оператора default
в C #. Тем не менее, я думаю, что стоит отметить, что defaultof
рассматривается как небезопасная вещь в F # и должна использоваться только тогда, когда это действительно необходимо (так же, как использование null
, что также не рекомендуется в F # ).
В большинстве случаев вы можете избежать необходимости defaultof
, используя тип option<'a>
. Это позволяет вам представить тот факт, что значение еще не доступно.
Однако вот краткий пример, демонстрирующий эту идею. Следующий код C #:
T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;
Вероятно, будет написано так на F # (с использованием императивных функций):
let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with
| None -> bar(arg)
| Some(temp) -> temp
Конечно, это зависит от вашего конкретного сценария, и в некоторых случаях defaultof
- это единственное, что вы можете сделать. Тем не менее, я просто хотел отметить, что defaultof
используется реже в F #.