在C#中
我正在关注的一本书为set和get属性提供建议:
double pri_test;
public double Test
{
get { return pri_test; }
set { pri_test = value < 0 ? -value : value; }
}
我了解value
正在做什么,它是使用该属性的外部输入值,但我不理解-value
和?
符号的使用:
有人可以解释这意味着什么:value < 0 ? -value : value
?
答案 0 :(得分:6)
您正在查看条件运算符。
请参阅?: Operator (C# Reference)
和?: (Wikipedia)
(后一个链接非常简洁!)
您经常会看到人们将条件运算符称为 三元运算符。这是因为三元运算符在这种情况下需要三个操作数 - 条件和两个表达式。
与-value
有关,前缀-
默认否定整数
int bar = 10;
int foo = -bar;
Console.Write(foo); //prints "-10".
答案 1 :(得分:4)
condition ? first_expression : second_expression;
condition
必须评估为true
或false
。如果condition
为true
,first_expression
被评估并成为结果。如果是condition
false
,second_expression
被评估并成为结果。
pri_test = value < 0 ? -value : value;
相当于;
if( value < 0 )
{
pri_test = -value;
}
else
{
pri_test = value;
}
答案 2 :(得分:4)
您已经得到一些答案,指向ternary operator,这占您问题的一半
有人可以解释一下这意味着什么吗?
value < 0 ? -value : value
该行对value
执行的操作是检查它是否为负数,如果是,则将其转为正数。如果该值从正值开始,那么它就不管它了。
.NET框架中已经有一个方法可以执行此操作:Math.Abs
。这条线可以重写为
pri_test = Math.Abs(value);
答案 3 :(得分:1)
这里用来取一个数字的绝对值。所以如果这个数字是负数。他们取数字否定,导致正数(减去乘以负数)。
其他答案涉及?:三元运算符,但我会在setter中将代码更改为这样:
set { pri_test = Math.Abs(value); }
更具可读性。
答案 4 :(得分:1)
value < 0 ? -value : value
等于此
if(value < 0)
{
pri_test = -value;
}
else
{
pri_test = value;
}