1

在 C# 中

我正在关注的一本书建议设置和获取属性:

double pri_test;

public double Test
{
    get { return pri_test; }
    set { pri_test = value < 0 ? -value : value; }
}

我了解value正在做什么,它是使用该属性的外部事物的输入值,但是我不了解符号的使用-value?:

有人可以解释一下这是什么意思:value < 0 ? -value : value

4

5 回答 5

6

您正在查看条件运算符。见?: Operator (C# Reference)and ?: (Wikipedia)(后面的链接很简洁!)

您经常会看到人们将条件运算符称为三元运算符。这是因为在这种情况下,三元运算符需要三个操作数 - 条件和两个表达式。


关于-value,前缀-仅仅否定整数

int bar = 10;
int foo  = -bar;
Console.Write(foo); //prints "-10".
于 2013-04-24T07:39:08.480 回答
4

?: Operator

condition ? first_expression : second_expression;

condition必须评估为trueor false。如果conditiontrue, first_expression被评估并成为结果。如果conditionfalse,second_expression被评估并成为结果。

pri_test = value < 0 ? -value : value; 

相当于;

if( value < 0 )
{
   pri_test = -value;
}
else
{
   pri_test = value;
}
于 2013-04-24T07:40:10.753 回答
4

您已经得到了一些指向三元运算符的答案,这占了您问题的一半

有人能解释一下这是什么意思吗?value < 0 ? -value : value

该行的作用value是检查它是否为负数,如果是,则将其转为正数。如果该值一开始是正数,它就会不理会它。

.NET 框架中已经有一个方法可以做到这一点:Math.Abs. 所以那行可以重写为

  pri_test = Math.Abs(value);
于 2013-04-24T07:44:16.727 回答
1

这里用来取一个数的绝对值。所以如果这个数字是负数。他们取负数,得到正数(负数乘以负数是正数)。

其他答案处理 ?: 三元运算符,但我会在 setter 中将代码更改为如下所示:

set { pri_test = Math.Abs(value); }

更具可读性。

于 2013-04-24T07:42:13.540 回答
1
value < 0 ? -value : value 

等于这个

if(value < 0) 
{

   pri_test = -value;

}
else
{
   pri_test = value;
}
于 2013-04-24T07:42:23.670 回答