Просто поигрался с бета-версией C # 8.0 и обновил часть моего кода, чтобы использовать обнуляемые ссылочные типы.
У меня есть класс стилей узла для реализации Trie.Каждый узел имеет значение типа T
.Конструктор для корневого узла не нуждается в значении, поэтому я установил его на default
.
Вот краткая версия:
public class Trie<T>
{
public readonly bool caseSensitive;
public readonly char? letter;
public readonly Dictionary<char, Trie<T>> children;
public readonly Trie<T>? parent;
public readonly int depth;
public bool completesString;
public T value;
public Trie(bool caseSensitive = false)
{
this.letter = null;
this.depth = 0;
this.parent = null;
this.children = new Dictionary<char, Trie<T>>();
this.completesString = false;
this.caseSensitive = caseSensitive;
this.value = default;
}
}
, если последняя строка ctor равнаизменилось на
this.value = default!;
, как я видел здесь в другом вопросе, тогда он компилируется просто отлично.Но я не понимаю, что здесь делает !
, и гуглить это довольно сложно, так как в большинстве случаев гугл игнорирует пунктуацию.
Что делает default!
?