【问题标题】:Using the ternary operator in C# for multiple expressions在 C# 中将三元运算符用于多个表达式
【发布时间】:2021-10-06 11:09:39
【问题描述】:

通过使用三元运算符 ?:

perClick  = PlayerPrefs.HasKey("clickpoints") ? PlayerPrefs.GetFloat("clickpoints") : 2.0f;

我想将存储在 PlayerPref 中的浮点数分配给“perClick”变量,如果条件计算为 True,或者,如果计算结果为 False,我想将“perClick”设置为 2。但是,如果为 False,我也想做 PlayerPrefs.SetFloat("clickpoints, 2.0f)。是否可以在最后一个选项中添加多个语句?

【问题讨论】:

  • 你可以调用一个方法,只要它返回正确的类型
  • perClick = PlayerPrefs.GetFloat("clickpoints", 2.0f); 使用函数的默认值版本即可。 docs.unity3d.com/ScriptReference/PlayerPrefs.GetFloat.html 如果您想强制首选项具有值,请也调用 PlayerPrefs.SetFloat("clickpoints, perClick);。如果perClick 是一个属性,您可以在设置器中更改时设置首选项。
  • 改用if then else 构造。它将使您的代码更易于阅读,并且不需要您诅咒和放弃。三元组的两部分是表达式而不是语句。他们的工作方式是var result=someCondition ? valueIfTrue : valueIfFalse;。像不相关的函数调用这样的语句没有空间

标签: c# unity3d conditional-operator


【解决方案1】:

您不能使用三元运算符来实现这一点,但您可以将所需的效果压缩到一个条件语句中:

if (PlayerPrefs.HasKey("clickpoints"))
  perClick = PlayerPrefs.GetFloat("clickpoints");
else
  PlayerPrefs.SetFloat("clickpoints", perClick = 2.0f);

但是,我不能再强调这样做有多糟糕,因为逻辑被混淆了(即使是训练有素的眼睛也很容易错过重要的细节)。你的代码应该尽可能地自我记录,特别是当减少代码行数不能获得额外的效率时(或者更喜欢?:,它是 if-else 大多数时候的语法糖 - 请参阅Is the conditional operator slow?)。

更好地表达你的意思......

....
else
{
  perClick = 2.0f;
  PlayerPrefs.SetFloat("clickpoints", perClick);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-30
    • 2014-11-13
    • 2022-01-21
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2021-04-24
    相关资源
    最近更新 更多