2013-04-24 207 views
1

在C#這是什麼意思/做什麼? 「value <0?-value:value;」

一本書我下面建議這對set和get屬性:

double pri_test; 

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

我明白了什麼value從東西做的,外面使用屬性的輸入值,但是我不」 t瞭解使用-value?符號和:

有人可以解釋這是什麼意思:value < 0 ? -value : value

+7

除此之外,它是可以用'pri_test = Math.Abs​​(值)來代替一個完全無用的三元操作;' – Jamiec 2013-04-24 07:41:21

+1

另外,編寫屬性並不好,因此'x.Property = y; Debug.Assert(x.Property == y);'失敗。如果您打算這麼做,請將其設爲方法調用,而不是屬性。 – 2013-04-24 07:45:50

+2

......而且,這個setter實現違反了設計準則。考慮這個代碼:'double v = -1; someInstance.Test = v; Debug.WriteLine(v == someInstance.Test);'。 – Dennis 2013-04-24 07:45:52

回答

6

您正在查看條件運算符。 見?: Operator (C# Reference)?: (Wikipedia)(後者鏈接是非常簡潔!)

你會經常看到有人指有條件的經營者作爲三元運算符。這是因爲三元運算符在這種情況下需要三個操作數 - 條件和兩個表達式。


用於修飾-value,前綴- meerly否定了整數

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

可能被稱爲「the」,因爲它是C#中唯一的三元運算符。但是,是的。它最明確地被命名爲條件操作符。 =) – 2013-04-24 07:55:05

4

?: Operator

condition ? first_expression : second_expression; 

condition必須求truefalse。如果conditiontrue, first_expression被評估併成爲結果。如果conditionfalse,second_expression被評估併成爲結果。

pri_test = value < 0 ? -value : value; 

相當於;

if(value < 0) 
{ 
    pri_test = -value; 
} 
else 
{ 
    pri_test = value; 
} 
+0

注意'?:'運算符不等同於'if-else'語句,儘管在這個問題中它們具有相同的結果。 – 2013-04-24 07:54:16

+0

@DannyChen當然_不完全相同。三元運算符用表達式的結果初始化一個變量。在編譯時,C#編譯器將三元表達式轉換爲分支語句。像['brtrue'](http://msdn.microsoft.com/tr-tr/library/system.reflection.emit.opcodes.brtrue.aspx) – 2013-04-24 08:10:34

+0

@SonerGönül,你的意思是http://msdn.microsoft.com /en-gb/library/system.reflection.emit.opcodes.brtrue.aspx,因爲這是一個講英語的網站。 – 2013-04-24 09:10:39

1

這裏它用來取一個數字的絕對值。所以如果這個數字是負數。他們把數字取反,結果是正數(減去乘以負數就是正數)。

其他的答案處理:三元運算符,但我會改變代碼的setter這樣閱讀:

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

更具有可讀性。

1
value < 0 ? -value : value 

是等於這個

if(value < 0) 
{ 

    pri_test = -value; 

} 
else 
{ 
    pri_test = value; 
} 
4

你已經得到了指點你到ternary operator幾個答案,即佔一半的問題

有人能解釋這意味着什麼。 ?value < 0 ? -value : value

那條線與value正在做的是檢查它是否爲負數,如果是,則將其變爲正數。如果價值從正值開始,它就會讓它一無所獲。

.NET框架中已經有一個方法可以做到這一點:Math.Abs。因此,該行可以重新寫爲

pri_test = Math.Abs(value); 
從你已經得到了正確的答案