这是什么意思/做什么? “值< 0? - 值:值;”

时间:2013-04-24 07:38:07

标签: c# properties

在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

5 个答案:

答案 0 :(得分:6)

您正在查看条件运算符。 请参阅?: Operator (C# Reference)?: (Wikipedia)(后一个链接非常简洁!)

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


-value有关,前缀-默认否定整数

int bar = 10;
int foo  = -bar;
Console.Write(foo); //prints "-10".

答案 1 :(得分:4)

来自?: Operator

condition ? first_expression : second_expression;
  

condition必须评估为truefalse。如果conditiontrue,   first_expression被评估并成为结果。如果是condition   falsesecond_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;
}