По вашему мнению, что более читабельно: ?? (оператор) или использование if's - PullRequest
3 голосов
/ 24 августа 2009

У меня есть метод, который получит string, но прежде чем я смогу с ним работать, я должен преобразовать его в int. Иногда это может быть null, и я должен изменить его значение на "0". Сегодня у меня есть:

public void doSomeWork(string value)
{
   int SomeValue = int.Parse(value ?? "0"); //it can throw an exception(i know)
}

Я сделал это, но мой начальник попросил меня изменить его на:

public void doSomeWork(string value)
{
    if(string.IsNullOrEmpty(value))
        value = "0";
    int SomeValue = int.Parse(value);
}

по вашему мнению, какой вариант лучше?

Ответы [ 13 ]

0 голосов
/ 24 августа 2009

[Предполагается, что вам нужно проверять только нулевую, а не пустую строку, как указывали другие]

Семантическое различие между ними заключается в том, что ?? является выражением, а if является выражением. Выражение говорит «выполнить вычисление и вернуть результат», именно такую ​​семантику вы ищете. Необходимо проделать дополнительную работу, чтобы оператор if мог выразить ту же семантику; кроме того, if оставляет место для большего количества логики, чем вычисления, пространство, которое вам не нужно.

Вы должны использовать оператор ??, потому что он точно выражает желаемое намерение.

0 голосов
/ 24 августа 2009

Ты можешь сделать это по-своему? Круто!

Если это определенно более читабельно, разве что каждый из C # вонет больше, чем я.

0 голосов
/ 24 августа 2009

В этом случае предыдущий более читабелен, как его тривиальный пример. ** Однако в вашем случае они не эквивалентны, как ?? отличается от строки. IsNullOrEmpty **

Последнее было бы лучше в тех случаях, когда if было сложным. Я бы сказал, лошади для курсов. Просто зависит от аудитории. Попробуй и будь проще.

public int doSomeWork(string value)
{
  return int.Parse(value ?? "0");
}



public int doSomeWork(string value)
{
   if(value == null)
      value = "0";
    int SomeValue = int.Parse(value);
    return SomeValue;
}
...