【问题标题】:initialization of two variables at the same time同时初始化两个变量
【发布时间】:2015-01-17 00:12:26
【问题描述】:

有没有办法同时初始化这两个变量?

在本例中,“时间”变量可以是“”或具有值。

var variable1 = string.IsNullOrEmpty(time) ? string.Empty : "value";
var variable2 = string.IsNullOrEmpty(time) ? "value" : string.Empty;

【问题讨论】:

  • 或许您可以解释一下为什么需要这样做?
  • 好吧,当一个得到一个值时,另一个得到另一个值,反之亦然,条件相同。所以我想有办法让它更短。
  • 越短通常意味着可读性越差。我不会担心缩短 2 行代码。
  • @DavidG 除非对评估条件有很大的惩罚。 (是的 .. 我知道 .. 过早优化)
  • 如果担心两次检查条件,可以使用简单的 if 语句。

标签: c# variables if-statement initialization shorthand-if


【解决方案1】:

给你,一个完全无法阅读的混乱:

string time = null;

string variable1, variable2 = (variable1 = string.IsNullOrEmpty(time) ? string.Empty : "value") == string.Empty ? "value" : string.Empty;

如果你看不出来,这不是一个严肃的建议。

【讨论】:

    【解决方案2】:

    可以在一行代码中将多个变量初始化为相同的值:

        string variable2;
        var variable1 = variable2 =(string.IsNullOrEmpty(time) ? string.Empty : "value");
    

    但是,我认为这是不可读的并且会避免它。

    对于您正在尝试做的事情(来自您的评论),我将使用一个简单的 if 语句,以便 IsNullOrEmpty 检查只执行一次。

        string variable1;
        string variable2;
        if (string.IsNullOrEmpty(time))
        {
            variable1 = null;
            variable2 = "value";
        }
        else
        {
            variable1 = "value";
            variable2 = null;
        }
    

    【讨论】:

    • 这是分配相同的值,但这不是 OP 想要做的。
    【解决方案3】:

    不可能。但是您可以创建一些辅助类来保存这两个变量。或者你可以使用一些开箱即用的,比如Tuple:

    var variable = string.IsNullOrEmpty(time) ? Tuple.Create(string.Empty, "value") 
                                              : Tuple.Create("value", string.Empty);
    

    然后以variable.Item1variable.Item2 访问这两个值。

    注意:明智地使用它,因为变量通常更好,因为它们有名称,因此 - 一些含义时间>。太多 Tuples 与所有 Item1Item2 很快就会变得不清楚,它们的目的是什么。

    【讨论】:

      【解决方案4】:

      没有。假设"value" 在这两种情况下都相同,那么您最多可以在第二行中将“值”替换为variable1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-27
        • 2019-05-17
        • 1970-01-01
        • 1970-01-01
        • 2016-01-24
        • 2018-06-23
        • 1970-01-01
        • 2018-12-29
        相关资源
        最近更新 更多