【问题标题】:C# inline if or value syntaxC# 内联 if 或 value 语法
【发布时间】:2012-03-01 18:34:28
【问题描述】:

C# 是否有类似 JavaScript 的 if 或 value 语法?

例如,我知道你可以在 JavaScript 中做到这一点:

var test = someValue || thisValue;

如果 someValue 为未定义、假或空字符串,则 test 变为 thisValue。但是,除了传统的 if 或 inline if 之外,我从未见过在 C# 中执行此操作的方法。

【问题讨论】:

  • 感谢所有精彩的回复!

标签: javascript c#-4.0


【解决方案1】:

NullCoalesce

var test = someValue ?? thisValue;

但是,C# 不会做出奇怪的 JavaScript 虚假行为。

C# 中的短路评估更适合评估布尔值:

private bool EvaluateA()
{
    return true;
}

private bool EvaluateB()
{
    return false;
}

public static int main()
{
    Console.Write(EvaluateA() || EvaluateB()); // EvaluateB is never called
}

【讨论】:

  • 您需要将其设为 OR,否则仍会调用 EvaluateB()。或者使 EvaluateA() return false; 然后 EvaluateB() 永远不会被调用。
  • 还有ternary 运算符可能对 OP 有用。
  • T || (Anyhting,True 或 False) == True, F && (Anything,T 或 F) 为假。短路意味着,它将评估第一个参数,如果它具有返回结果所需的全部内容,则根本不会评估第二个参数。
【解决方案2】:

它被称为空合并运算符。

String someValue = null;
var thisValue = "Foo";
var test = someValue ?? thisValue;
// test will be == "Foo"

如 cmets 中所述,这不适用于空字符串、“false”等。如果您真的想这样做,您可以在 C# 中编写一个扩展方法来做到这一点:

public static class MyStringThing {
    public static String FixErUp(this String s1, String s2) {
        if (String.IsNullOrWhiteSpace(s1) || s1.Equals("false"))
            return s2;
        return s1;
    }
}

这样使用:

String someValue = "false";
var thisValue = "Foo";
var test = someValue.FixErUp(thisValue);
// test will be == "Foo"

【讨论】:

  • 注意 - 这仅适用于空实例,不适用于假/空字符串。
【解决方案3】:

使用??

var test = someValue ?? thisValue;

这仅在someValue 为空时有效。要检查falsestring.Empty,您需要使用普通的if 语句。

【讨论】:

    【解决方案4】:

    不是真的。但它确实有空值合并。

    给定一个引用类型,如果它是null,您可以拥有该值或替代值。

    string foo = null;
    string value = foo ?? "bar"; // value == "bar"
    

    否则对于任何其他情况(即非空、所有空格、值类型等),您将不得不进行其他形式的检查。

    string foo = "";
    string value1 = foo ?? "bar"; // value1 == ""
    string value2 = !String.IsNullOrEmpty(foo) ? foo : "bar"; // value1 == "bar"
    

    【讨论】:

      猜你喜欢
      • 2015-02-06
      • 2011-03-25
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      相关资源
      最近更新 更多