繁体   English   中英

这行C#代码有什么作用?

[英]What does this line of C# code do?

int hour = DateTime.Now.Hour; 
ViewData["greeting"] = (hour < 12 ? "Good morning" : "Good afternoon"); 

对于noob问题很抱歉,但我正在阅读的ASP.NET MVC书假定我已经知道C#(但我不知道)。

我理解第一部分 - 它将当前日期和时间分配给小时变量。 但我在第二线输了。 什么是<, ?, :符号? ViewData [“greeting”]这是一个有几种类型的数组?

谢谢!

如果小时小于12,则为ViewDate [“greeting”]分配值“早上好”。 否则,它被赋予“下午好”的值。

?:位是条件运算符 MSDN给出了一个很好的描述:

条件运算符(?:)根据布尔表达式的值返回两个值中的一个。

的? 被称为条件运算符。

它充当if-then-else语句,唯一的区别是它实际上在评估时返回一些东西。

举个简单的例子:

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

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

这两个例子是相同的。 条件运算符由两个子句(除条件之外)组成,一个在冒号之前,一个在冒号之后: - 在条件== true时评估before,在条件== false时评估after。

<只是一个操作员,检查左侧是否小于右侧。 1 <2 == true,而3 <2 == false。

ViewData [“greeting”]只是数组ViewData中具有索引greeting的项目。

整个代码只根据当前时间分配问候消息。

编辑:如上所述, int hour = DateTime.Now.Hour; 将当前小时(0-23)分配给整数变量hour

它是if语句的简短版本。

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

我理解第一部分 - 它将当前日期和时间分配给小时变量。

那不太对劲。 让我们分析表达式右侧的每个部分:

DateTime - 这是一种类型(类),用于存储和操作具有日期和时间组件的值。

Now - 这是DateTime类型的静态成员。 这意味着您不使用特定实例来访问它,而是使用类型本身的名称。 此静态成员返回使用当前日期和时间填充的新DateTime实例。 请注意,一旦创建此实例不会更改; 几行代码后来它已经过时了。

Hour - 返回一个数字,表示24小时格式的DateTime实例的小时部分(0表示午夜,13表示下午1点)。

因此,这一起返回一个代表当前小时的数字。 将此与解释条件和小于运算符的其他答案相结合,代码应该更有意义。 如果小时大于12,那就是中午之后。

这仍然留下了ViewData[] ViewData是一种特殊的Dictionary类型(由key索引的键/值对),用于将数据从MVC控制器传递到MVC视图。

基本上说如果小时<12使用“早安”,否则使用“下午好” - 就像内联if语句一样。

这是另一种形式的“if else”。 问号左侧的语句作为if语句,如果是,则为ViewData["greeting"]分配“:”左侧的值,如果是,则为“:”右侧的值。假。

Larsenal的回答是正确的。 更一般地说, ? ... : ... ? ... : ...是基于C语言的if的简写符号。 它可能会降低可读性,但关于它的好处是你可以在赋值运算符之后使用它,就像在你的例子中一样。

只是回答你问题的另一部分,你问的是符号是什么:<=小于(所以小于12的小时)?:= ternary( http://en.wikipedia.org/wiki/Ternary_operation )基本上说是否if语句(小时<12)= true然后在问题makr后使用值,如果不在冒号后使用值。

<符号是数学上很好的'男孩',被称为“Less Then” ? 连同:我们称之为“三元运算符”或“条件运算符” ,它就像一个内联if-then-else语句。

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

可写成

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

所以,这段代码正在做的是根据时钟获取当前小时,检查它是否在12点之前(也就是中午),并相应地分配问候语。

我在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"; 

如果这更容易理解......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM