Итак, это суть вопроса: может ли Foo.Bar когда-либо возвращать null? Чтобы уточнить, можно ли для '_bar' установить значение null после того, как он был оценен как ненулевое значение и до того, как оно будет возвращено?
public class Foo
{
Object _bar;
public Object Bar
{
get { return _bar ?? new Object(); }
set { _bar = value; }
}
}
Я знаю, что использование следующего метода get небезопасно и может возвращать нулевое значение:
get { return _bar != null ? _bar : new Object(); }
ОБНОВЛЕНИЕ :
Другой способ взглянуть на ту же проблему, этот пример мог бы быть более ясным:
public static T GetValue<T>(ref T value) where T : class, new()
{
return value ?? new T();
}
И снова вопрос, может ли GetValue (... ) когда-либо возвращать null? В зависимости от вашего определения это может быть или не быть потокобезопасным ... Я думаю, правильная постановка задачи спрашивает, является ли это атомарной операцией над значением ... Дэвид Яу лучше всего определил вопрос, сказав, является ли указанная выше функция эквивалентом на следующее:
public static T GetValue<T>(ref T value) where T : class, new()
{
T result = value;
if (result != null)
return result;
else
return new T();
}