C# 通过示例学习-术语(?,:,等)

C# 通过示例学习-术语(?,:,等),c#,operators,terminology,ternary-operator,C#,Operators,Terminology,Ternary Operator,当你还是个孩子的时候,你有没有问过你的父母怎么拼写,他们让你去查?我的第一印象总是,“如果我能查一下,我就不需要别人帮我拼写了。”。(是的,我懂语音学) …无论如何,我只是在看一些代码,我发现了一个如下示例: txtbx.CharacterCasing = (checkbox.Checked) ? CharacterCasing.Upper : CharacterCasing.Normal; 我能搞清楚这个操作的作用,但很明显,我不能用谷歌搜索?或者:我在搜索“c#运算符”、LINQ、Lam

当你还是个孩子的时候,你有没有问过你的父母怎么拼写,他们让你去查?我的第一印象总是,“如果我能查一下,我就不需要别人帮我拼写了。”。(是的,我懂语音学)

…无论如何,我只是在看一些代码,我发现了一个如下示例:

 txtbx.CharacterCasing = (checkbox.Checked) ? CharacterCasing.Upper : CharacterCasing.Normal;
我能搞清楚这个操作的作用,但很明显,我不能用谷歌搜索?或者:我在搜索“c#运算符”、LINQ、Lambda表达式等时找不到它们。所以我不得不问这个愚蠢的问题,这样我就可以开始阅读了


这些运算符是什么?

是内联if语句。“?”是if的代码,“:”是else的代码。

?:
是,最好的方法是在这里询问

condition ? first_expression : second_expression;
如果条件为true,则计算第一个表达式并将其作为结果;如果为false,则计算第二个表达式并将其作为结果。仅对两个表达式中的一个进行求值

当整个表达式相对较短时,它对赋值的可读性非常有帮助:

string name = string.IsNullOrEmpty(user.Nickname) ? user.Fullname : user.Nickname
比以下操作更简单、更快:

string name = user.Fullname;
if(!string.IsNullOrEmpty(user.Nickname))
{
    name = user.Nickname;
}

是一个内联-if语句。这意味着,如果选中的
checkbox.Checked
true
,则
CharacterCasing.Upper
将是表达式的值,否则将为
CharacterCasing.Normal

它的工作原理如下:


类型值=条件?真值:假值

是什么?也被称为

,顺便说一句,你可以在维基百科上找到这个

请注意,它有时也称为“三元”运算符,因为它是类C语言中唯一的三元(3参数)运算符。

Btw。 当你在学习C#时,看看它有时比?:,好得多

考虑:

Console.WriteLine(user.LastName ?? "no last name provided");
vs:


如果语法是else而不是:,那么对初学者来说就容易多了@肯尼:“VB的
If…Then…End If
结构可以说符合你的定义,而C#则与
{
}
搭配使用,以提高可读性和简洁性。使用条件语句有什么好处(可读性、性能等)operators@DataPimp可读性。这对作业特别有帮助(见我更新的答案).哈哈,StackOverflow绝对是你最好的选择!我想补充一点?:运算符是“三元”运算符,因为它需要三个操作数(比较二元运算符),因为它恰好是许多语言中唯一的三元运算符,有时也被称为三元运算符。上一级显示了所有运算符的列表,这些运算符可能对不熟悉该语言的人有所帮助:有趣的是,我想我已经准备好问这个问题了,“什么?”?mean:“三元运算符”只是指“接受三个参数的运算符”,没有指定它们的用途或含义。@Rex:这是真的,但大多数语言只有一个3-arg运算符,因此是“三元运算符”“。尽管它不是特定的,但这个术语通常用于标识?:运算符。它被称为三元运算符。”。OP可以通过谷歌搜索找到答案。另一个你可能不知道的是聚合操作符(??)。这个问题(及其答案)非常值得一读。第二个表达式应该是:user.LastName!=无效的user.LastName:“未提供姓氏”考虑下载C#规范——目录对于快速确定事物名称非常方便。
Console.WriteLine(user.LastName != null ? user.LastName : "no last name provided");