2009-06-30 80 views
16

Tôi biết rằng C# có từ khóa using, nhưng tự động loại bỏ đối tượng của đối tượng using.Tương đương với "Với ... End With" trong C#?

Có sự tương đương của With...End With trong Visual Basic 6.0 không?

+2

"với" thực sự tồn tại tốt trước khi VB. Nó tồn tại trong Pascal, để xử lý các loại bản ghi. Không biết liệu Pascal có mượn ý tưởng từ nơi khác không. – JeffK

Trả lời

28

C# không có cấu trúc ngôn ngữ tương đương cho điều đó.

+3

điều này là đúng. Nhưng nếu bạn có một lớp với các phương thức trả về 'this', thì bạn có thể kết hợp các phương thức với nhau. – Dlongnecker

5

Không có tương đương với ... End With in C#.

Đây là a comparison chart cho bạn minh họa sự khác biệt giữa Visual Basic và C#.

+0

Biểu đồ so sánh đó thật tuyệt vời. Tôi đang làm việc trên chuyển sang C# từ VB và đó là sẽ rất hữu ích. –

2

Không có cấu trúc tương đương trong C#. Đây là một tính năng Visual Basic 6.0/VB.NET.

31

Nó không tương đương, nhưng cú pháp này có phù hợp với bạn không?

Animal a = new Animal() 
{ 
    SpeciesName = "Lion", 
    IsHairy = true, 
    NumberOfLegs = 4 
}; 
+0

"Với" không tạo ra các cá thể, do đó, điều này là sai. –

6

Tôi nghĩ rằng tương đương với VB sau:

With SomeObjectExpression() 
    .SomeProperty = 5 
    .SomeOtherProperty = "Hello" 
End With 

có thể đây là C#:

{ 
    Var q=SomeOtherExpression(); 
    q.SomeProperty = 5; 
    q.SomeOtherProperty = "Hello"; 
} 

Sự khác biệt duy nhất là trong vb, các số nhận dạng không có tên "q", nhưng chỉ đơn giản là một số nhận dạng mặc định được sử dụng khi một khoảng thời gian gặp phải mà không có y định danh khác trước nó.

+1

Có gì với các đường cong bên ngoài?Xin lỗi, nhưng điều này không có cách nào gần tương đương. Nó chỉ là một loạt các cuộc gọi đến setters. – tomfanning

+2

Niềng răng bên ngoài đặt phạm vi biến q. Miễn là biểu thức đối tượng là một lớp chứ không phải là cấu trúc, tôi nghĩ rằng mã VB.Net và C# ở trên gần như tương đương chính xác. Câu lệnh trước là một ví dụ về cách sử dụng câu lệnh with, và câu lệnh sau là bản dịch C#. Ví dụ C# sử dụng một vài setters vì đó là những gì mà ví dụ VB.net tùy ý chọn. Điểm quan trọng là "with" tương đương với việc xác định một biến tạm thời và sau đó sử dụng nó bất cứ lúc nào một khoảng thời gian được sử dụng mà không có từ định danh trước. – supercat

+0

Đó không phải là một tương đương, đó là một thay thế. –

15

Không có tương đương, nhưng tôi nghĩ rằng thảo luận về cú pháp có thể thú vị!

Tôi rất thích;

NameSpace.MyObject. 
{ 
    active = true; 
    bgcol = Color.Red; 
} 

Bất kỳ đề xuất nào khác?

Tôi không thể tưởng tượng rằng việc thêm tính năng ngôn ngữ này sẽ khó khăn, về cơ bản chỉ là tiền xử lý.

EDIT:

Tôi phát ốm vì chờ đợi cho tính năng này, vì vậy đây là phần mở rộng và đó đạt được một hành vi tương tự.

/// <summary> 
/// C# implementation of Visual Basics With statement 
/// </summary> 
public static void With<T>(this T _object, Action<T> _action) 
{ 
    _action(_object); 
} 

Cách sử dụng;

LongInstanceOfPersonVariableName.With(x => { 
    x.AgeIntVar = 21; 
    x.NameStrVar = "John"; 
    x.NameStrVar += " Smith"; 
    //etc.. 
}); 

EDIT: Điều thú vị là có vẻ như một người nào đó đánh bại tôi vào những cú đấm, một lần nữa, với điều này "giải pháp". Oh well ..

+0

Mặc dù không chính xác như nhau, tôi thích ý tưởng của bạn. Nếu được sử dụng với định dạng tốt, nó có thể làm cho mã dễ đọc hơn. – Rudi

+0

Vì vậy, bạn đã kết thúc với một lần nữa lặp lại tên biến. Bạn có thể làm tương tự với: 'x = LongInstanceOfPersonVariableName; x.AgeIntVar = 21; // etc.' – LoBo

+1

Tôi vừa ném lên một chút trong miệng. – JJS

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