int hour = DateTime.Now.Hour;
ViewData["greeting"] = (hour < 12 ? "Good morning" : "Good afternoon");
对于noob问题很抱歉,但我正在阅读的ASP.NET MVC书假定我已经知道C#(但我不知道)。
我理解第一部分 - 它为小时变量指定当前日期和时间。但我在第二线输了。那些<, ?, :
符号是什么? ViewData [“greeting”] 这是一些排序吗?
谢谢!
答案 0 :(得分:18)
如果小时小于12,则为ViewDate [“greeting”]分配值“早上好”。否则,它被赋予“下午好”的值。
?:位是conditional operator。 MSDN给出了一个很好的描述:
条件运算符(?:)返回 两个值中的一个取决于 布尔表达式的值。
答案 1 :(得分:8)
?被称为条件运算符。
它充当if-then-else语句,唯一的区别是它实际上在评估时返回了一些东西。
举个简单的例子:
// ex 1
if (condition)
name = "Female";
else
name = "Male";
// ex 2
name = condition ? "Female" : "Male";
这两个例子是相同的。条件运算符由两个子句(除条件之外)组成,一个在冒号之前,一个在冒号之后: - 在条件= = true时评估before,在条件== false时评估after。
&lt;只是一个操作员,检查左侧是否小于右侧。 1&lt; 2 == true,而3&lt; 2 == false。
ViewData [“greeting”]只是数组ViewData中索引为greeting
的项目。
整个代码只根据当前时间分配问候语。
编辑:
如上所述,int hour = DateTime.Now.Hour;
将当前小时(0-23)分配给整数变量hour
答案 2 :(得分:5)
它是if
声明的简短版本。
if (hour < 12)
ViewData["Greeting"] = "Good Morning";
else
ViewData["Greeting"] = "Good afternoon";
答案 3 :(得分:4)
我理解第一部分 - 它将当前日期和时间分配给小时变量。
那不太对劲。让我们分析表达式右侧的每个部分:
DateTime
- 这是一个类型(类),用于存储和操作具有日期和时间组件的值。
Now
- 这是DateTime类型的静态成员。这意味着您不使用特定实例来访问它,而是使用类型本身的名称。此静态成员返回使用当前日期和时间填充的新DateTime实例。请注意,一旦创建此实例不会更改;几行代码后来它已经过时了。
Hour
- 返回一个数字,表示24小时格式的DateTime实例的小时部分(0表示午夜,13表示下午1点)。
因此,总之,这会返回一个代表当前小时的数字。将此与解释条件和小于运算符的其他答案相结合,代码应该更有意义。如果小时大于12,那就是中午之后。
仍然留下ViewData[]
。 ViewData是一种特殊的Dictionary类型(由key索引的键/值对),用于将数据从MVC控制器传递到MVC视图。
答案 4 :(得分:2)
基本上说是否小时&lt; 12使用“早安”,否则使用“Good Afternoon” - 就像内联if语句一样。
答案 5 :(得分:1)
这是另一种形式的“if else”。问号左侧的语句代表if语句,ViewData["greeting"]
分配给“:”左边的值(如果是),右边的值分配给“:”如果它是假的
答案 6 :(得分:1)
Larsenal的回答是正确的。更一般地说,? ... : ...
是基于C语言的if
的简写符号。它可能会降低可读性,但关于它的好处是你可以在赋值运算符之后使用它,就像在你的例子中一样。
答案 7 :(得分:1)
只是回答你问题的其他部分,你问的符号是什么: &LT; =小于(小于12小时) ?:= ternary(http://en.wikipedia.org/wiki/Ternary_operation)基本上说if语句(小时&lt; 12)= true然后在问题makr之后使用值,如果不在冒号后使用值。
答案 8 :(得分:1)
<
符号是来自数学的好男孩,被称为“Less Then”
?
与:
一起基本上就是"Ternary Operator" or "Conditional Operator",它就像内联if-then-else一样。
if ( 5 > 2 )
dosomething();
else
dosomethingelse();
可以写成
(5 > 2 ) ? dosomething() : dosomethingelse();
所以,这段代码正在做的是根据时钟获取当前小时, 检查是否在12点之前(也就是中午),并相应地分配问候语。
答案 9 :(得分:1)
我在c#中表现不佳,但很清楚这段代码的作用:
第一行获取当前小时。含义:如果是7点钟,变量“小时”的值将设置为7:
int hour = DateTime.Now.Hour;
“ViewData”显然是一个包含一些String数据的数组。索引“问候”的值将设置为“早上好”,如果是在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";
如果这更容易理解......