2010-07-02 187 views
2
int hour = DateTime.Now.Hour; 
ViewData["greeting"] = (hour < 12 ? "Good morning" : "Good afternoon"); 

對不起noob問題,但我正在閱讀的ASP.NET MVC書籍假設我已經知道C#(但我不知道)。這行C#代碼是做什麼的?

我瞭解第一部分 - 它將當前日期和時間分配給小時變量。但是我迷失在二線。那些<, ?, :符號是什麼? ViewData [「greeting」]這是一個什麼樣的數組?

謝謝!

+15

你應該先學C#。 – SLaks 2010-07-02 22:33:50

+0

@Robert?如果你正在閱讀的書假設你知道X,那麼在閱讀之前你應該知道X.這很簡單:p – 2010-07-02 22:36:51

回答

18

如果小時小於12,則ViewDate [「greeting」]被分配值「早上好」。否則,它會被分配一個「下午好」的值。

?:位是conditional operator。 MSDN給出了一個很好的描述:

條件運算符(:)返回取決於布爾表達式的值 兩個值中的一個 。

+0

也被稱爲「三元運算符」 – 2010-07-03 02:05:10

+0

稱爲「A」三元運算符...不是「三元運算符」。由於大多數語言通常在語言中只有一個三元運算符,它有時簡稱爲「三元運算符」,但事實並非如此。條件運算符是一個三元運算符。 – Sivvy 2010-07-16 17:34:39

5

它是if聲明的簡短版本。

if (hour < 12) 
    ViewData["Greeting"] = "Good Morning"; 
else 
    ViewData["Greeting"] = "Good afternoon"; 
+3

雖然這與定期的if語句有點不同,您不能在賦值運算符之後或其他表達式中嵌入常規if語句。 – 2010-07-02 22:39:10

2

基本上是說,如果小時< 12用「早上好」,否則用「下午好」 - 像if語句內聯。

1

這是另一種形式的「if else」。問號左側的陳述表示if語句,ViewData["greeting"]如果爲真,則分配「:」左側的值,如果爲真,則分配「:」右側的值。

1

Larsenal的回答是正確的。更一般地,? ... : ...是基於C的語言中的if的簡寫符號。它可能會降低可讀性,但好處在於,您可以在賦值運算符之後使用它,如您的示例中所示。

1

只是爲了回答你的問題的另一部分,你問什麼符號分別爲: < =小於(因此是低於每小時12) :=三元(http://en.wikipedia.org/wiki/Ternary_operation)基本上是說,如果if語句(小時< 12)= true然後使用問題makr後的值,如果冒號後沒有使用值。

8

The?被稱爲條件運算符。

它充當if-then-else語句,唯一不同的是它在評估時實際返回了某些內容。

採取這個簡單的例子:

// ex 1 
if (condition) 
    name = "Female"; 
else 
    name = "Male"; 

// ex 2 
name = condition ? "Female" : "Male"; 

這兩個例子是相同的。條件運算符由兩個子句(條件除外)組成,前一個和後一個冒號: - before是在條件== true上評估的,而after是在條件== false上評估的。

<只是一個操作符,用於檢查左側是否小於右側。1 < 2 == true,而3 < 2 == false。

ViewData [「greeting」]就是數組ViewData中索引爲greeting的項目。

整個代碼只是根據當前時間分配一個問候消息。

編輯: 如上所述,int hour = DateTime.Now.Hour;當前小時(0-23)分配給整數變量hour

1

<符號是從數學好「醇男孩,被稱爲‘小於’ 的?連同:就是我們所說的"Ternary Operator" or "Conditional Operator"基本上,它就像內嵌的if-then-else語句。

if (5 > 2) 
    dosomething(); 
else 
    dosomethingelse(); 

可以寫成

(5 > 2) ? dosomething() : dosomethingelse(); 

所以,這是什麼代碼正在做的是根據時鐘獲取當前的小時, 檢查,看它是否是中午12點(又名中午)之前,和相應地分配問候語。

4

我瞭解第一部分 - 它將當前日期和時間分配給小時變量。

這並不完全正確。讓我們分析表達式右邊的每個部分:

DateTime - 這是一個用於存儲和操作具有日期和時間組件的值的類型(類)。

Now - 這是DateTime類型的靜態成員。這意味着你不使用特定的實例來訪問它,而是使用類型本身的名稱。這個靜態成員返回一個新的DateTime實例,填充當前的日期和時間。請注意,一旦創建此實例不會改變;幾行代碼後來它已經過時了。

Hour - 這將返回一個數字,指示24小時格式的DateTime實例的Hour部分(0是午夜,13是1pm)。

所以,合起來,這會返回一個代表當前小時的數字。將其與解釋條件操作符和小於操作符的其他答案結合起來,代碼應該更有意義。如果小時大於12,則在中午之後。

這仍然離開ViewData[]。 ViewData是一種特殊類型的字典類型(按鍵索引的鍵/值對),用於將數據從MVC控制器傳遞到MVC視圖。

1

以及我不是在C#好,但它很清楚這個代碼:

第一線獲取當前小時。這意味着:如果其7時,該varialble的值「小時」將被設定爲7:

int hour = DateTime.Now.Hour; 

「的ViewData」是顯然的陣列保持一些字符串數據。 「問候」指數的值將設置爲「早上好」,如果在12點之前,則爲「下午好」,否則......

ViewData["greeting"] = (hour < 12 ? "Good morning" : "Good afternoon"); 

準確的說,

ViewData["greeting"] = (hour < 12 ? "Good morning" : "Good afternoon"); 

等於

if(hour < 12) 
    ViewData["greeting"] = "Good morning"; 
else 
    ViewData["greeting"] = "Good afternoon"; 

,如果這是比較容易理解...