2013-07-19 34 views
7

Các assignment operator trong C# trả về giá trị được gán. Không rõ nơi/cách tính năng này có thể hữu ích. Sử dụng nó trong một cú pháp lạ như thế này có thể giúp bạn tiết kiệm một dòng mã, nhưng sẽ không làm bất kỳ điều gì tốt để có thể đọc được:Tại sao toán tử gán trả về giá trị đã gán trong C#?

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

Mục đích của nó là gì?

+1

Đây không chỉ là chất lượng cú pháp C#. Đôi khi nó tiện dụng trong các câu lệnh, cho phép bạn gán và kiểm tra đồng thời. Nó, tuy nhiên, làm cho mã obfuscated hơn, do đó, nó không thấy sử dụng nhiều. Tóm tắt: chuyển nhượng là một biểu thức, không phải là một tuyên bố! –

+5

Một câu hỏi hay khác là sự khởi tạo lười biếng, như trong '_myInstance ?? (_myInstance = new MyObject()) ' – McGarnagle

+5

btn1.Visible = btn2.Visible = false; – EricLaw

Trả lời

12

Chained assignment là một yếu của nhiều ngôn ngữ sẽ quay lại C (và có thể sớm hơn). C# hỗ trợ nó bởi vì đó là một tính năng phổ biến của các ngôn ngữ đó và có một số giới hạn sử dụng — như tuyên bố goto.

Đôi khi bạn có thể xem mã như thế này:

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

Hoặc này:

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

này có thể làm cho một số mã một chút nhỏ gọn hơn, hoặc cho phép bạn làm một số thủ thuật thông minh, nhưng nó chắc chắn không làm cho nó dễ đọc hơn. Tôi khuyên bạn nên chống lại nó trong hầu hết các trường hợp.

+2

Tôi sử dụng rất phổ biến cho chúng tôi có bất kỳ lúc nào tôi làm việc với nhiều lớp IO để kiểm tra kết quả của một hoạt động đọc 'while ((currentLine = streamReader.ReadLine())! = Null) {...}' –

+0

@ScottChamberlain Yep, đó cũng là một ví dụ hay. –

4

Tôi thường sử dụng nó để gán các thuộc tính giống nhau cho điều khiển.

btnSubmit.Enabled = btnAdd.Enabled = btnCancel.Enabled = txtID.Enabled= false; 
Các vấn đề liên quan