【问题标题】:Why does assignment operator return the assigned value in C#? [duplicate]为什么赋值运算符在 C# 中返回分配的值? [复制]
【发布时间】:2013-07-19 03:00:43
【问题描述】:

C# 中的assignment operator 返回分配的值。 目前尚不清楚此功能在何处/如何提供帮助。像这样以奇怪的语法使用它可以节省一行代码,但对可读性没有任何好处:

   private String value;
   public void SetAndPrintValue(String value)
      PrintValue(this.value = value);
   }
   private static void PrintValue(String value) {
      /* blah */
   }

那么它的目的是什么?

【问题讨论】:

  • 这不仅仅是 C# 语法质量。它有时在 if 语句中很方便,允许您同时分配和测试。但是,它确实会产生更多的混淆代码,因此它没有多大用处。总结:赋值是表达式,不是语句!
  • 另一个好方法是惰性实例化,如_myInstance ?? (_myInstance = new MyObject())
  • btn1.Visible = btn2.Visible = false;

标签: c#


【解决方案1】:

Chained assignment 是许多可以追溯到 C 语言(可能更早)的主要语言。 C# 支持它,因为它是此类语言的一个共同特征,并且有一些有限用途——比如goto 语句。

有时你可能会看到这样的代码:

int a, b, c;
for(a = b = c = 100; a <= b; c--)
{
    // some weird for-loop here
}

或者这个:

var node = leaf;
while(null != node = node.parent) 
    node.DoStuff();

这可能会使一些代码更紧凑,或者允许您做一些巧妙的技巧,但它肯定不会使其更具可读性。在大多数情况下,我建议不要这样做。

【讨论】:

  • 我对它们非常常见的用途是任何时候我使用许多 IO 类来检查读取操作的结果while ((currentLine = streamReader.ReadLine()) != null) { ... }
  • @ScottChamberlain 是的,这也是一个很好的例子。
【解决方案2】:

我通常使用它来为控件分配相同的属性。

btnSubmit.Enabled = btnAdd.Enabled = btnCancel.Enabled = txtID.Enabled= false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    相关资源
    最近更新 更多