#c# #.net
#c# #.net
Вопрос:
List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;
int closest = list.Aggregate((x,y) =>
Math.Abs(x-number) < Math.Abs(y-number) ? x : y);
? x : y, что это значит?
Ответ №1:
это эквивалент
if Math.Abs(x-number) < Math.Abs(y-number) then use x else use y
Смотрите документацию MSDN (старая версия / новая версия) для получения более подробной информации и примеров
Ответ №2:
Это троичный оператор. Он инкапсулирует if-else-return
в одной строке.
Комментарии:
1. троичный означает просто 3 части! (аналогично унарному и двоичному). Это более точно известно как условный оператор.
2. Я сказал, что это
a
троичный оператор, а не этоthe
троичный оператор. Ссылки передают их оператору.
Ответ №3:
Это позволит вам указать условие и два выражения. Когда условие выполняется, возвращается первое выражение. Когда значение равно false , возвращается второе выражение. В данном случае вы используете это как условие:
Math.Abs(x-number) < Math.Abs(y-number)
Когда это значение равно true, x
возвращается, когда false, y
. Созданный выше лямбда-код фактически совпадает с написанием:
int closest = list.Aggregate((x,y) =>
{
if (Math.Abs(x-number) < Math.Abs(y-number))
return x;
else
return y;
});
Ответ №4:
На самом деле это немного больше, чем ? x : y
То, что вы видите, называется троичным оператором и в основном является сокращением классического оператора if / else. Троичный оператор принимает следующий вид:
<boolean_expression> ? <value_to_use_if_true> : <value_to_use_if_false>
В вашем случае логическое выражение равно:
Math.Abs(x-number) < Math.Abs(y-number)
И, если это выражение оценивается как true, вы получите значение:
x
В противном случае вы получите:
y
Ответ №5:
a ? b : c
это троичный оператор, он переводится как:
if(a)
b;
else
c;
Комментарии:
1. Однако
b
иc
являются не утверждениями, а выражениями.
Ответ №6:
Троичный оператор ?
— если условие в LHS of ?
истинно, возвращает x
— если условие ложно, возвращает y
Ответ №7:
BoolOpeartor ? Истинное значение : ложное значение;
Ответ №8:
Это то же самое, что:
if (Math.Abs(x-number) < Math.Abs(y-number))
return x;
else
return y;
Ответ №9:
это троичный оператор
if(Math.Abs(x-number) < Math.Abs(y-number))
true
else
false
.
Или просто
Math.Abs(x-number) < Math.Abs(y-number) ? x : y
Ответ №10:
Код, который вы опубликовали:
List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;
int closest = list.Aggregate((x,y) => Math.Abs(x-number) < Math.Abs(y-number) ? x : y);
Эквивалентно следующему:
List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;
int closest = list.Aggregate((x,y) =>
{
if(Math.Abs(x-number) < Math.Abs(y-number))
{
return x;
}
else
{
return y;
}
});
То, что вы используете, называется условным оператором, который является сокращенным обозначением для оператора if-else, где возвращаемый результат выбирается следующим образом: {условие true / false} ? {значение, если true} : {значение, если false}