C #: Gán cùng một giá trị cho nhiều biến trong một câu lệnh


161

Có cách nào không (vì tò mò vì tôi đã bắt gặp nhiều phép gán cùng giá trị cho nhiều biến số ngày hôm nay) trong C # để gán một giá trị cho nhiều biến cùng một lúc trong một câu lệnh?

Một cái gì đó dọc theo các dòng này (mã giả):

int num1 = 1;
int num2 = 1;

num1 & num2 = 5;

Có lẽ là không nhưng tôi nghĩ rằng nó đáng để hỏi trong trường hợp điều gì đó tương tự thực sự có thể!

Câu trả lời:


258

Nó đơn giản như:

num1 = num2 = 5;

Khi sử dụng một thuộc tính đối tượng thay vì biến, thật thú vị khi biết rằng trình truy cập getcủa giá trị trung gian không được gọi. Chỉ người settruy cập được gọi cho tất cả các thuộc tính được truy cập trong chuỗi gán.

Lấy ví dụ một lớp ghi vào bàn điều khiển mỗi khi trình truy cập getvà trình truy cập setđược gọi.

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;
        }
    }
}

Điều này sẽ xuất

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

Có nghĩa là trình biên dịch sẽ gán giá trị cho tất cả các thuộc tính và nó sẽ không đọc lại giá trị mỗi khi nó được gán.


36
Nó thực sự không lạ. Logic như sau: Chính hoạt động gán sẽ trả về một giá trị, là giá trị đã được gán. Trình tự thực hiện là: num1 = (num2 = 5)và phép gán đầu tiên được thực thi ( num2 = 5) trả về giá trị 5 cho thế giới bên ngoài - lần lượt được gán cho num1. Điều này hoạt động quảng cáo infinitum ( num0 = num1 = num2 = 5).
Jpsy

Nếu bạn muốn kiểm tra nó, hãy thử Console.WriteLine(num = 5);. (Tuyên bố miễn trừ trách nhiệm: Tôi chưa có)
Arlen Beiler

3
Câu hỏi: Đây có được coi là thực hành xấu num1 = num2 = 5? Liệu nó biến mã không thể đọc được nếu có nhiều biến hơn? Xin lỗi để đánh cắp, tôi không muốn tạo một bài viết mới cho nó.
johnildergleidisson

Không có câu trả lời đúng. Tôi chỉ sử dụng nó trong chương trình của mình và tôi có thể tránh được.
Pierre-Alain Vigete

Xuống phong cách mã hóa tôi giả sử rồi. Cảm ơn vi đa trả lơi.
johnildergleidisson

54

Điều này sẽ làm bạn muốn:

int num1, num2;
num1 = num2 = 5;

Việc gán 'num2 = 5' sẽ trả về giá trị được gán.

Điều này cho phép bạn thực hiện những điều điên rồ như num1 = (num2 = 5) +3;sẽ gán 8 cho num1, mặc dù tôi không khuyên bạn nên làm điều đó vì không thể đọc được.


Nó không làm việc nữa.
Aurelien B

33
int num1=5,num2=5

Khai báo và gán các biến trong cùng một câu lệnh.


Đây là một tuyên bố duy nhất hoặc hai tuyên bố?
Merin Nakarmi

câu trả lời tuyệt vời, nhưng trông lạ khi "5" là một chuỗi dài. string a = "really long string", b = "really long string";
Alex

13

Một cái gì đó ngắn hơn một chút trong cú pháp nhưng lấy những gì những người khác đã nêu.

int num1, num2 = num1 = 1;

Tôi nghĩ rằng đây là câu trả lời tốt nhất vì cả khởi tạo và gán đều có thể được thực hiện trong một câu lệnh.
Parinar Sachin

11

Thử cái này:

num1 = num2 = 5;

Lưu ý rằng điều này sẽ không hoạt động trong VB.


1
Bạn có biết nếu có một số cú pháp thay thế cho các nhà phát triển VB, hoặc nhiều nhiệm vụ đơn giản là không có sẵn trong VB?
ckittel

3
@cki: AFAIK, nó không được hỗ trợ.
SLaks

@ckittel Trong VB =được sử dụng cả cho phép gán và đẳng thức, do đó num1 = num2 = 5sẽ có nghĩa là "gán kết quả boolean cho dù năm hay không bằng với num2biến num1". Bởi vì =toán tử có hai nghĩa này, không có cách nào để biểu diễn cú pháp này. Điều tốt nhất bạn có thể làm là tạo một hàm lấy một số tham số byrefcũng như một giá trị và gán tất cả các tham số cho giá trị đó.
Phục vụ


5
int num1, num2, num3;

num1 = num2 = num3 = 5;

Console.WriteLine(num1 + "=" + num2 + "=" + num3);    // 5=5=5


5

Ví dụ của bạn sẽ là:

int num1 = 1;
int num2 = 1;

num1 = num2 = 5;


0

Đây là một điều trong C #:

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

Bằng cách làm ở trên, về cơ bản bạn đã khai báo ba biến. a = 1, b = 2c = 3. Tất cả trong một dòng duy nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.