2009-07-24 36 views
20

thể trùng lặp:
Equivalence of “With…End With” in c#?C# tương đương với câu lệnh Với trong VB là gì?

Có một tính năng của VB mà tôi thực sự thích ... báo cáo kết quả With. C# có bất kỳ tương đương với nó? Tôi biết bạn có thể sử dụng using để không phải nhập một không gian tên, nhưng nó chỉ giới hạn ở đó. Trong VB bạn có thể làm điều này:

With Stuff.Elements.Foo 
    .Name = "Bob Dylan" 
    .Age = 68 
    .Location = "On Tour" 
    .IsCool = True 
End With 

Cùng mã trong C# sẽ là:

Stuff.Elements.Foo.Name = "Bob Dylan"; 
Stuff.Elements.Foo.Age = 68; 
Stuff.Elements.Foo.Location = "On Tour"; 
Stuff.Elements.Foo.IsCool = true; 
+0

dupe http://stackoverflow.com/questions/1063429/equivalence-of-with-end-with-in-c – Jimmy

Trả lời

36

Không thực sự, bạn phải gán một biến. Vì vậy,

var bar = Stuff.Elements.Foo; 
    bar.Name = "Bob Dylan"; 
    bar.Age = 68; 
    bar.Location = "On Tour"; 
    bar.IsCool = True; 

Hoặc trong C# 3.0:

var bar = Stuff.Elements.Foo 
    { 
     Name = "Bob Dylan", 
     Age = 68, 
     Location = "On Tour", 
     IsCool = True 
    }; 
+9

Bạn đang xử lý 'Stuff.Elements.Foo' làm loại. Có phải đó là cách nó đang được sử dụng trong mã VB, hoặc nó thực sự là một tham chiếu đến một biến lồng nhau? Kỹ thuật này hoàn toàn hợp lệ nhưng tôi nghĩ rằng mã của bạn không hoàn toàn đúng. – quark

+3

Tôi đã viết một [blog] (http://blog.baltrinic.com/software-development/dotnet/c-equivalent-for-visual-basic-with-statement) một số thời gian trở lại về cách mô phỏng một câu lệnh bằng C# sử dụng các phương thức mở rộng và các biểu thức lambda. –

+1

@Kenneth: Điều đó khá thông minh, mặc dù có thể lập luận rằng 'Object.Child.Grandchild.GreatGrandchild.Property1 = 1;' vi phạm Luật Demeter. –

4

Điều gần gũi nhất trong C# 3.0, là bạn có thể sử dụng một constructor để khởi tạo thuộc tính:

Stuff.Elements.Foo foo = new Stuff.Elements.Foo() {Name = "Bob Dylan", Age = 68, Location = "On Tour", IsCool = true} 
+2

Bạn đang xử lý 'Stuff.Elements.Foo' làm loại. Có phải đó là cách nó đang được sử dụng trong mã VB, hoặc nó thực sự là một tham chiếu đến một biến lồng nhau? Kỹ thuật này hoàn toàn hợp lệ nhưng tôi nghĩ rằng mã của bạn không hoàn toàn đúng. (Tôi đã sao chép bình luận của quark ở đây vì nó cũng áp dụng cho câu trả lời này) – MarkJ

7

Ngoài initializers đối tượng (chỉ có thể sử dụng trong các cuộc gọi hàm tạo), tốt nhất bạn có thể nhận được là:

var it = Stuff.Elements.Foo; 
it.Name = "Bob Dylan"; 
it.Age = 68; 
... 
Các vấn đề liên quan