Что эквивалентно в F # ключевого слова по умолчанию С#?

Я ищу эквивалент ключевого слова С# default, например:

public T GetNext()
{
    T temp = default(T);
            ...

Спасибо

Ответ 1

Я нашел это в блоге: " Что выглядит этот код на С# в F #? (часть первая: выражения и утверждения)"

С# имеет оператор, называемый "default" который возвращает нулевую инициализацию значение данного типа:

default(int) 

Он имеет ограниченную полезность; чаще всего вы можете использовать default (T) в общем. F # имеет аналогичная конструкция как библиотека Функция:

Unchecked.defaultof<int>

Ответ 2

Технически говоря, функция F # Unchecked.defaultof<'a> эквивалентна оператору default в С#. Тем не менее, я думаю, стоит отметить, что defaultof рассматривается как небезопасная вещь в F # и должен использоваться только тогда, когда это действительно необходимо (так же, как использование null, которое также не рекомендуется в F #).

В большинстве случаев вы можете избежать необходимости defaultof с помощью типа option<'a>. Это позволяет вам представить, что значение еще не доступно.

Однако, вот краткий пример, демонстрирующий идею. Следующий код С#:

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 #.