【问题标题】:C#: Assign same value to multiple variables in single statementC#:在单个语句中为多个变量分配相同的值
【发布时间】:2010-11-28 00:03:13
【问题描述】:

在 C# 中有什么方法(只是出于好奇,因为我今天遇到了多个相同的值赋值给多个变量)在单个语句中一次将一个值赋值给多个变量?

类似的东西(伪代码):

int num1 = 1;
int num2 = 1;

num1 & num2 = 5;

可能不会,但我认为值得一问,以防类似的事情实际上是可能的!

【问题讨论】:

    标签: c#


    【解决方案1】:

    很简单:

    num1 = num2 = 5;
    

    当使用对象属性而不是变量时,有趣的是知道不会调用中间值的get 访问器。对于分配序列中访问的所有属性,仅调用 set 访问器。

    以每次调用 getset 访问器时写入控制台的类为例。

    static void Main(string[] args)
    {
        var accessorSource = new AccessorTest(5);
        var accessor1 = new AccessorTest();
        var accessor2 = new AccessorTest();
    
        accessor1.Value = accessor2.Value = accessorSource.Value;
    
        Console.ReadLine();
    }
    
    public class AccessorTest
    {
        public AccessorTest(int value = default(int))
        {
            _Value = value;
        }
    
        private int _Value;
    
        public int Value
        {
            get
            {
                Console.WriteLine("AccessorTest.Value.get {0}", _Value);
                return _Value;
            }
            set
            {
                Console.WriteLine("AccessorTest.Value.set {0}", value);
                _Value = value;
            }
        }
    }
    

    这将输出

    AccessorTest.Value.get 5
    AccessorTest.Value.set 5
    AccessorTest.Value.set 5
    

    意思是编译器会为所有的属性赋值,并且不会在每次赋值时都重新读取。

    【讨论】:

    • 其实并不奇怪。逻辑如下:赋值操作本身返回一个值,也就是已经赋值的值。执行顺序为:num1 = (num2 = 5),执行的第一个赋值 (num2 = 5) 将值 5 返回给外部世界 - 依次赋值给 num1。这无限地有效(num0 = num1 = num2 = 5)。
    • 如果你想测试它,试试Console.WriteLine(num = 5);。 (免责声明:我还没有)
    • 问题:这被认为是不好的做法num1 = num2 = 5?如果涉及更多变量,它是否会使代码不可读?很抱歉劫持,我不想为此创建一个新帖子。
    • 没有正确答案。我只在我的程序中很少使用它,我本可以避免它。
    • 我假设的编码风格。感谢您的回复。
    【解决方案2】:

    这将是你想要的:

    int num1, num2;
    num1 = num2 = 5;
    

    'num2 = 5' 赋值将返回赋值。

    这让你可以做一些疯狂的事情,比如num1 = (num2 = 5) +3;,它将 8 分配给 num1,虽然我不建议这样做,因为它的可读性不是很好。

    【讨论】:

      【解决方案3】:
      int num1=5,num2=5
      

      在同一语句中声明和分配变量。

      【讨论】:

      • 这是一个语句还是两个语句?
      • 很好的答案,但是当“5”是一个长字符串常量时看起来很奇怪。 string a = "really long string", b = "really long string";
      【解决方案4】:

      语法稍短一些,但采用其他人已经说过的内容。

      int num1, num2 = num1 = 1;
      

      【讨论】:

      • 我认为这是最好的答案,因为初始化和赋值都可以在一条语句中完成。
      【解决方案5】:

      试试这个:

      num1 = num2 = 5;
      

      请注意,这在 VB 中不起作用。

      【讨论】:

      • 您知道是否有一些可供 VB 开发人员使用的替代语法,还是 VB 中根本没有多重赋值?
      • @cki: AFAIK,不支持。
      • @ckittel 在 VB 中 = 用于赋值和相等,所以 num1 = num2 = 5 的意思是“将 5 是否等于 num2 的布尔结果赋值给变量 @987654325 @"。因为= 运算符有这两种含义,所以没有办法表示这种语法。您可以做的最好的事情是创建一个函数,该函数接受多个参数byref 以及一个值并将所有参数分配给该值。
      【解决方案6】:

      这现在是 C# 中的一个东西:

      var (a, b, c) = (1, 2, 3);
      

      通过上述操作,您基本上已经声明了三个变量。 a = 1b = 2c = 3。全部在一行中。

      【讨论】:

      • 哇,不知道这个。能否提供文档链接?
      • docs.microsoft.com/en-us/dotnet/csharp/deconstruct "从 C# 7.0 开始,您可以从一个元组中检索多个元素,或者在一个解构操作中从一个对象中检索多个字段、属性和计算值。当您解构一个元组时,您将其元素分配给各个变量。当您解构一个对象时,您将选定的值分配给各个变量。”
      • 我的一位同事在今天早上的演示中展示了一些使用这种语法的代码。自 2003 年以来我一直在编写 C#,但这对我来说是新的。感谢您的评论以及文档链接。
      【解决方案7】:

      num1 = num2 = 5

      【讨论】:

        【解决方案8】:

        你的例子是:

        int num1 = 1;
        int num2 = 1;
        
        num1 = num2 = 5;
        

        【讨论】:

          【解决方案9】:
          int num1, num2, num3;
          
          num1 = num2 = num3 = 5;
          
          Console.WriteLine(num1 + "=" + num2 + "=" + num3);    // 5=5=5
          

          【讨论】:

            【解决方案10】:

            类似的东西。

            num1 = num2 = 5
            

            【讨论】:

              【解决方案11】:

              很简单。

              int num1, num2;
              num1 = num2 = 5;
              

              【讨论】:

                猜你喜欢
                • 2017-09-16
                • 1970-01-01
                • 2012-07-23
                • 2017-10-25
                • 2014-12-28
                • 1970-01-01
                • 2013-06-03
                • 2011-02-01
                • 2021-09-25
                相关资源
                最近更新 更多