2012-02-28 34 views
5

thể trùng lặp: Equivalence of “With…End With” in C#?Có một VB.NET "Với" tuyên bố trong C#?

Vì vậy, tôi không biết nếu câu hỏi này đã được hỏi trước và tôi không phải là một fan hâm mộ lớn của VB.NET. Nhưng một cú pháp mà tôi bị thiếu trong C# là cú pháp With.

Trong VB.NET bạn có thể viết:

Dim sb As New StringBuilder 
With sb 
    .Append("foo") 
    .Append("bar") 
    .Append("zap") 
End With 

Có một cú pháp trong C# mà tôi đã bỏ lỡ điều đó làm điều tương tự?

+0

Nó thực sự tốt hơn để viết rằng thay vì 'sb.Append (" foo ")' ?? Tôi đang lập trình 12 năm trong VB.NET và chưa bao giờ hiểu được lợi ích của câu lệnh. Chỉ là một điều bạn phải tra cứu mọi lúc (Điều đó lại là gì?) –

+0

@TimSchmelter: Tôi tự hỏi điều tương tự. Tôi mã trong VB.NET cho 4 năm qua có thể, và chưa bao giờ tìm thấy một sử dụng cho các tuyên bố với, ngoại trừ mới ... Với cấu trúc. –

Trả lời

11

Không, không có.

Điều này đã được cố ý bỏ qua C#, vì nó không thêm nhiều tiện lợi, và bởi vì nó có thể dễ dàng được sử dụng để viết mã khó hiểu.

Blog bài từ Scott Wiltamuth, Giám đốc chương trình Group cho Visual C#, về với từ khóa: http://msdn.microsoft.com/en-us/vstudio/aa336816.aspx

Đối với trường hợp đặc biệt của một StringBuilder, bạn có thể chuỗi các cuộc gọi:

StringBuilder sb = new StringBuilder() 
    .Append("foo") 
    .Append("bar") 
    .Append("zap"); 
+2

Chỉ cần ra khỏi tò mò, bạn có thể cung cấp một ví dụ về một mã VB.Net khó hiểu sử dụng With/End With? – ken2k

+0

bạn cũng có thể lưu ý rằng C# có cú pháp khởi tạo đối tượng, nhưng nó chỉ có thể được sử dụng để đặt các biến đối tượng công khai, không thực hiện các cuộc gọi hàm. –

2

Không, không có cú pháp tương đương.

With chỉ là VB/VB.NET.

0

Có isn 't - đây là chỉ Visual Basic.

Một trong những lý do chính khiến nó bị loại bỏ khỏi C# là nó có thể dẫn đến mã khó hiểu, ví dụ khi sử dụng câu lệnh lồng nhau With.

+0

Liên kết dường như bị hỏng –

+0

Các liên kết dường như bị (có hiệu quả) bị hỏng - liên kết chuyển hướng đến một trang không cụ thể. –

4

Không có sự tương tự trực tiếp với câu lệnh VB With.

Tuy nhiên, lưu ý rằng StringBuilder.Append trả về dụ StringBuilder, vì vậy đoạn mã sau là tương đương với gốc của bạn:

sb.Append("foo").Append("bar").Append("zap"); 

hoặc thậm chí

sb.Append("foo") 
    .Append("bar") 
    .Append("zap"); 

Đây không phải là có thể cho tất cả các đối tượng/phương pháp, Tuy nhiên.

2

Có một tương đương cho New Type With:

var obj = new Type { 
    PropName = Value, 
    PropName = Value 
}; 

, nhưng không cho phổ biến With.

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