Справка по синтаксису условного оператора - PullRequest
0 голосов
/ 18 января 2011

Я прохожу этот учебник WPF http://blogs.vertigo.com/personal/alanl/Blog/Lists/Posts/Post.aspx?ID=18 и у меня есть вопрос о разделе CountToFontSizeConverter этого учебника. Может ли кто-нибудь объяснить мне, пожалуйста, заявление о возврате, т.е.

return ((minFontSize + count + increment) < maxFontSize) ? 
         (minFontSize + count + increment) : maxFontSize;

Я понимаю, что это условно, но синтаксис выглядит довольно индивидуально. Если возможно, может кто-нибудь переписать это более простым способом? Спасибо

Ответы [ 5 ]

4 голосов
/ 18 января 2011

Не уверен, что вы подразумеваете под "несколько сделанным на заказ", но это стоит сломать.

Оригинал:

return ((minFontSize + count + increment) < maxFontSize) 
      ? (minFontSize + count + increment) : maxFontSize;

Сломано:

bool condition = (minFontSize + count + increment) < maxFontSize;
if (condition)
{
    return minFontSize + count + increment;
}
else
{
    return maxFontSize;
}

Лучший подход - гораздо более читабельный:

return Math.Min(minFontSize + count + increment, maxFontSize);

Как правило, вы обычно можете заменить выражение вида

a < b ? a : b

с

Math.Min(a, b)

при условии, что a и b имеют числовые типы. Это не всегда так, но это хорошая отправная точка.

0 голосов
/ 18 января 2011

Это всего лишь условный оператор из C #. Синтаксис похож на следующий Состояние? Statement1 (если true): Statement2 (если false) Если ваше условие возвращает true, выполняется Statement1, а если оказывается false, выполняется Statement2.

В вашем случае, если (minFontSize + count + increment)> maxFontSize, maxFontSize оценивается иначе (minFontSize + count + increment)

0 голосов
/ 18 января 2011
var cache = (minFontSize + count + increment);

return (cache < maxFontSize) ? cache : maxFontSize;
0 голосов
/ 18 января 2011

Это пример троичного условного оператора (или просто условного оператора) и может быть переписан как:

if ((minFontSize + count + increment) < maxFontSize) 
{
  return minFontSize + count + increment;
}

return maxFontSize;
0 голосов
/ 18 января 2011

Это:

return ((minFontSize + count + increment) < maxFontSize) ? (minFontSize + count + increment) : maxFontSize;

Эффективно переводится как:

if ((minFontSize + count + increment) < maxFontSize)
     return (minFontSize + count + increment);
else
     return maxFontSize;

В этом случае, поскольку цель состоит в том, чтобы не дать выражению быть больше, чем «maxFontSize», я бы лично использовал:

return Math.Min(minFontSize + count + increment, maxFontSize);

Я считаю, что это выражает намерение гораздо яснее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...