Сам столкнувшись с этой ситуацией, я решил проверить свой код, где я разбираюсь в этом. Я имею тенденцию иметь два решения, оба из которых связаны с нулевым коалесцирующим оператором.
Дело 1: Инициализация. Используя свои значения из выше, это становится:
object a = null ?? something;
Очевидно, что я не стал бы писать эту строку кода (ReSharper будет жаловаться, если ничего другого). Но это суть происходящего. Если у меня есть два (или более) значения, доступные при создании a
, тогда я пишу его вот так.
Корпус 2: Никогда не устанавливайте a
, но используйте ??
, когда используется a
. В этом случае код будет:
MethodTakingA(a ?? b);
Если есть несколько вызовов метода или других местах, где я должен был бы использовать ??
, то это плохая идея.
Существует третий случай, когда я выполняю точное задание, которого вы избегаете. То есть, когда один из параметров моего метода может быть нулевым, и у меня есть значение по умолчанию, которое нужно использовать в этом случае (вместо того, чтобы бросать ArgumentNullException
). Вот пример:
public void Foo(string str)
{
str = str ?? String.Empty;
//Use str as needed below without fear that it might be null.
}
Я хотел бы лучше ответить на этот случай, но я, конечно, не писать код, где микро-оптимизации, что назначение стоит, и теоретический ответ
string localStr = str ?? String.Empty;
Просто добавляет новую переменную, чтобы добавить ее. В противном случае мне нечего делать, поэтому я сохраняю свое самоназвание и живу с ним.
Поэтому я предполагаю, что 'a = a ?? b; 'отсутствует? –
@JoelRondeau Появляется так - OP не хочет, чтобы 'a' был привязан к себе. –
'if (a == null) a = b;' Если вы не хотите, чтобы 'a' был назначен обратно на' a', вам, вероятно, придется использовать оператор 'if'. – heavyd