2010-02-22 26 views
11

Có cách nào để thực hiện điều này trong VB.NET như trong ngôn ngữ C-Kiểu:Multiassignment trong VB như trong ngôn ngữ C-Style

struct Thickness 
{ 
    double _Left; 
    double _Right; 
    double _Top; 
    double _Bottom; 

    public Thickness(double uniformLength) 
    { 
     this._Left = this._Right = this._Top = this._Bottom = uniformLength; 
    } 
} 
+1

Có lợi thế nào của việc chuyển nhượng nhiều lần so với thực hiện từng bài tập riêng lẻ không? Nhiều ứng dụng dịch sẽ tối ưu hóa hai ứng dụng này sẽ bằng nhau trong thời gian chạy. –

+0

Có, có một lợi thế. Nếu bạn muốn gán một giá trị cụ thể, hãy nói 1.7834 đến H (I) và W (J), bạn phải nhập 1.7834 chỉ một lần, xử lý hiệu quả nó như là hằng số 1 lần, trong khi gõ nó hai lần, không rõ ràng là hai hằng số, mặc dù bằng nhau, là cùng một hằng số. Ví dụ: nếu H & W là chiều cao và chiều rộng, có thể trùng hợp là chiều cao và chiều rộng bằng nhau hoặc chúng luôn có thể đại diện cho một hình vuông. – Chelmite

Trả lời

14

Mở rộng trên câu trả lời đúng của Mark

Kiểu chuyển nhượng này không thể thực hiện được trong VB.Net. Phiên bản C# của mã hoạt động vì trong nhiệm vụ C# là một biểu thức tạo ra một giá trị. Đây là lý do tại sao nó có thể bị xích theo cách này.

Trong việc gán VB.Net là một câu lệnh chứ không phải là một biểu thức. Nó không tạo ra giá trị và không thể thay đổi. Trong thực tế, nếu bạn viết mã "a = b" như một biểu thức, nó sẽ được coi là so sánh giá trị và không phải là một phép gán.

bài viết trên blog gần đây của Eric về chủ đề này cho C#

Tại một nhiệm vụ cấp độ ngôn ngữ là một tuyên bố và không phải là một biểu hiện.

+0

Câu trả lời được giải thích tốt. – Shimmy

+0

Để biết thông tin, đây là một mục yêu thích để thêm hỗ trợ cho điều này: http://blogs.msdn.com/lucian/archive/2010/02/12/req7-have-separate-syntax-for-assignment-and-comparison .aspx –

8

Ngay sau khi tôi đăng bài này, ai đó sẽ cung cấp một ví dụ làm thế nào để làm điều đó. Nhưng Tôi không nghĩ rằng nó có thể. VB.NET xử lý đơn bằng với giá trị r như một so sánh. Ví dụ:

Dim i As Integer 
    Dim j As Integer 
    i = 5 
    j = i = 4 
    Debug.Print(j.ToString()) 
    j = i = 5 
    Debug.Print(j.ToString()) 

Mã trên in 0 (sai) và -1 (đúng).

+1

Không thể thực hiện được. Đây là nơi Lucian, người dẫn đầu đặc tả VB.Net, blog về việc liệu nó có đáng để thêm vào hay không. http://blogs.msdn.com/lucian/archive/2010/02/12/req7-have-separate-syntax-for-assignment-and-comparison.aspx Đối với điểm thưởng đây là Eric Lippert (hoạt động trên trình biên dịch C#) về mức độ khó hiểu của nó trong C#. http://blogs.msdn.com/ericlippert/archive/2010/02/11/chaining-simple-assignments-is-not-so-simple.aspx – MarkJ

Các vấn đề liên quan