Я играю с портированием некоторого кода на C #, чтобы включить обнуляемые ссылочные типы, и я столкнулся с некоторыми функциями в нашем коде, которые используют шаблон TryGetValue
.
То есть как то так:
public bool TryGetSession(string key, out Session session) {
session = null; // assign default
// code which looks for a session based on the key, etc
// return true or false if we found the session key
}
Шаблон, который мы здесь пытаемся выразить, таков: «если возвращаемое значение истинно, то session
не равно нулю. Если ложно, то даже не пытайтесь посмотреть на сеанс, это мусор.
Проблема в том, что теперь я получаю предупреждение о session = null
, но я вынужден поместить туда что-то , так как out
параметры ДОЛЖНЫ быть заполнены функцией.
Здесь есть хороший ответ? Мои мысли:
Я мог бы отбросить шаблон TryGet
и включить обнуляемые ссылочные типы (это то, что делают другие языки, такие как Swift), например.
Session? GetSession(string key);
Или я мог бы выполнить свое «ненулевое» обещание, используя значение заполнителя, например,
public bool TryGetSession(string key, out Session session) {
session = new InvalidSession(); // assign default
...
}
Есть ли другие варианты?