return String.IsNullOrEmpty(returnUrl) ?
RedirectToAction("Open", "ServiceCall") :
Redirect(returnUrl);
Я предпочитаю это.
Или альтернатива:
return String.IsNullOrEmpty(returnUrl)
? RedirectToAction("Open", "ServiceCall")
: Redirect(returnUrl);
Первый. Вам не нужен никто больше при возврате значения в если оператор. Так:
if (!String.IsNullOrEmpty(returnUrl))
return Redirect(returnUrl);
return RedirectToAction("Open", "ServiceCall");
Когда у меня иногда есть только одна строка, я уплотняю если оператор как это:
if(String.IsNullOrEmpty(returnUrl)) {
return RedirectToAction("Open", "ServiceCall");
}
else{ return Redirect(returnUrl); }
Хотя, когда я смотрю на него, у Andrew Rollings могло бы быть лучшее решение, хотя я никогда не думал об использовании его до сих пор.
LFSR's "еще" решение является самым удобным в сопровождении и читаемым.
Используя отдельное else
пункт позволяет логике быть добавленной, непреднамеренно не изменяя поток. И это плохо достаточно имеет несколько точек выхода, не скрывая двух из них в единственном операторе тернарного оператора!
С точки зрения обслуживания я предпочитаю первую версию. Я видел, что меньше ошибок с последовательным "вынимает рано" стиль.
Тернарный оператор (? :) в порядке, но только если очень маловероятно, что новый код будет введен перед 2-м оператором возврата. Иначе, когда время настает для добавления чего-то нового в 2-й путь выполнения кода, троичный оператор должен вернуться к тому, чтобы быть если/еще блок так или иначе.
Как насчет:
if (!String.IsNullOrEmpty(returnUrl))
return Redirect(returnUrl);
else
return RedirectToAction("Open", "ServiceCall");
Как здесь, но более читаемый:
return
string.isNullorEmpty(returnUrl) ?
RedirectToAction("Open", "ServiceCall") :
Redirect(returnUrl);
Таким образом, работы, является читаемым и нерезервированным.
Не думайте, что существует лучший способ, которым... это зависит от каждого разработчика. Вот почему прежде, чем запустить проект необходимо решить то, что является стандартом кодирования...
Мне нравится первое лучше.
if ( )
{
return ...
}
return
Для меня это читает как "значение по умолчанию", можно объединить больше условий в цепочку, но в конце существует значение по умолчанию.
Конечно, это - вопрос стиля.
Дополнительный вопрос.
Это - стиль C# для помещения квадратных скобок и в одну строку?
if ( )
{
}
else
{
}
Я видел, что это проникало в примеры кода Java в Так, и я задаюсь вопросом, это - первопричина.
Править
@Owen. Я имею в виду, это стиль C# с помощью этой формы?
if ()
{
code ...
}
else
{
code...
}
Вместо этого (который был бы предпочтенным Java),
if ( ) {
code ...
} else {
code ...
}
У меня были некоторые аргументы в прошлом об этом, но большинство времен, только с людьми, которые происходят из среды C#.
Если бы это - полнота метода затем, я сказал бы, что второе (использование еще) немного более изящно. Если бы у Вас еще есть предыдущий код или (особенно) намного больше кода перед возвратом в случай, я сказал бы, что лучше еще не поместить. Удерживается от кода, становящегося слишком с отступом.
т.е. также:
void myfunc()
{
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Open", "ServiceCall");
}
}
или
void myfunc()
{
// ... maybe some code here ...
if(!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
// ... a bunch of other code ...
return RedirectToAction("Open", "ServiceCall");
}
Устраните 'двойное отрицательное' и используйте полностью расширенный стиль. Я уверен, что большинство компиляторов теперь может соответственно оптимизировать код от Вашего имени, таким образом, никакая причина взять ярлыки для удобочитаемости.
Я думаю, что это - довольно маленький вопрос стиля. Я утверждал бы, что Ваши два образца одинаково читаемы.
Я предпочитаю первого, но другие люди предпочитают только одну точку выхода от функции и вероятно предложили бы что-то как:
if (!String.IsNullOrEmpty(returnUrl))
{
result = Redirect(returnUrl);
}
else
{
result = RedirectToAction("Open", "ServiceCall");
}
return result;
Мне нравится первый пример, потому что более очевидно, что эта выборка возвратится. Если оба return
s находятся в блоках с отступом, это прилагает просто немного больше умственных усилий для сообщения.
второй путь лучше, никакой беспорядок о том, что Вы имеете в виду...
Одна проблема стиля:
if (String.IsNullOrEmpty(returnUrl))
{
return RedirectToAction("Open", "ServiceCall");
}
return Redirect(returnUrl);
Когда Вы уравновешиваете двойное отрицание, оно читает намного лучше, неважно, которые заключают в фигурные скобки стиль, который Вы выбираете. Код, который читает лучше, является всегда лучшим ;)
Я полагаю, что лучше удалить не (отрицание) и получить положительное утверждение сначала:
if (String.IsNullOrEmpty(returnUrl))
{
return RedirectToAction("Open", "ServiceCall");
}
else
{
return Redirect(returnUrl);
}
- или -
// Andrew Rollings solution
return String.IsNullOrEmpty(returnUrl) ?
RedirectToAction("Open", "ServiceCall") :
Redirect(returnUrl);
Этот код чувствует себя грязным из-за неизбежной двойной отрицательной логики (и вещи перестановки вокруг не собирается разрешать его). Какой бы ни расположение, которое Вы используете, я думаю, что необходимо добавить некоторые комментарии так, чтобы читатель не должен был получше вглядываться:
if (!String.IsNullOrEmpty(returnUrl))
{
// hooray, we have a URL
return Redirect(returnUrl);
}
else
{
// no url, go to the default place
return RedirectToAction("Open", "ServiceCall");
}