【问题标题】:Learning by example - terminology (?, :, etc)通过示例学习 - 术语(?、:等)
【发布时间】:2010-12-08 02:39:48
【问题描述】:

当你还是个孩子的时候,你有没有问过你的父母如何拼写一些东西,他们让你去查一下?我的第一印象总是,“如果可以查一下,我就不需要拼写帮助了”。 (是的,我知道语音)

...无论如何,我只是在看一些代码,发现了一个类似的示例:

 txtbx.CharacterCasing = (checkbox.Checked) ? CharacterCasing.Upper : CharacterCasing.Normal;

我可以弄清楚这个操作是做什么的,但很明显,我不能用谷歌搜索? or : 我在搜索“c# 运算符”、LINQ、Lambda 表达式等时找不到它们。所以我不得不问这个愚蠢的问题,这样我才能开始阅读它。

这些运算符是什么?

【问题讨论】:

  • 考虑下载 C# 规范——目录对于快速确定事物的名称非常方便。

标签: c# operators terminology ternary-operator


【解决方案1】:

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

【讨论】:

  • 如果语法是 else 而不是 :! 对初学者来说会更容易
  • @Kenny:“VB 的 If...Then...End If 结构可以说符合您的定义,但 C# 使用 {} 以提高可读性和简洁性。
【解决方案2】:

?:conditional operator,最好的方法是在这里问!

condition ? first_expression : second_expression;

如果条件为真,则计算第一个表达式并成为结果;如果为 false,则计算第二个表达式并成为结果。两个表达式中只有一个被计算过。

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

string name = string.IsNullOrEmpty(user.Nickname) ? user.Fullname : user.Nickname

比:

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

【讨论】:

  • 使用条件运算符有什么好处(可读性、性能等)
  • @DataPimp 可读性。这对分配特别有帮助(请参阅我的更新答案)。
  • 哈哈,StackOverflow 绝对是您的最佳选择!我想补充一点? : 运算符是一个“三元”运算符,因为它需要三个操作数(比较二元运算符),并且由于它恰好是许多语言中唯一的三元运算符,因此有时也称为 the 三元运算符。
  • 上一层会显示所有运算符的列表,这可能对不熟悉该语言的人有所帮助:msdn.microsoft.com/en-us/library/6a71f45d(VS.80).aspx
  • 有趣的是,我以为我已经准备好因为问这个问题而被激怒了,“什么?意思是”:)
【解决方案3】:

? 是一个内联-if 语句。这意味着如果checkbox.Checkedtrue,那么CharacterCasing.Upper 将是表达式的值,否则CharacterCasing.Normal 将是。

它是这样工作的:

type value = condition ? trueValue : falseValue;

【讨论】:

【解决方案4】:

那个?也称为ternary operator

【讨论】:

  • “三元运算符”仅表示“接受三个参数的运算符”,没有具体说明它们的用途或含义。
  • @Rex:这是真的,但大多数语言只有一个 3-arg 运算符,因此是“三元运算符”。尽管它并不具体,但该术语通常用于标识 ?: 运算符。
【解决方案5】:

顺便说一句,你可以在维基百科上search for "?:" 找到这个。

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

【讨论】:

    【解决方案6】:

    顺便说一句。 当你正在学习 C# 时,请查看 ?? operator 它有时比 ?:. 更好的选择。

    考虑:

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

    对比:

    Console.WriteLine(user.LastName != null ? user.LastName : "no last name provided");
    

    【讨论】:

    • 第二个表达式应该是:user.LastName != null ? user.LastName : "未提供姓氏"
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2017-06-30
    相关资源
    最近更新 更多