2012-01-17 24 views
18

Hãy xem xét ví dụ sau mã:List.ForEach trong vb.net - bối rối tôi

TempList.ForEach(Function(obj) 
     obj.Deleted = True 
    End Function) 

Và một điều này:

TempList.ForEach(Function(obj) obj.Deleted = True) 

Tôi mong chờ kết quả là như nhau, tuy nhiên thứ hai Ví dụ mã không thay đổi các đối tượng trong danh sách TempList.

Bài đăng này hiểu thêm lý do tại sao ...? Hoặc ít nhất có được một số trợ giúp để hiểu tại sao ...

Trả lời

40

Đó là vì bạn đã sử dụng Function thay vì Sub. Kể từ khi Function trả về một giá trị, trình biên dịch xem xét rằng dấu bằng (=) được sử dụng như một so sánh, không phải là một nhiệm vụ. Nếu bạn thay đổi Function để Sub, trình biên dịch sẽ xem xét một cách chính xác dấu bằng như một bài tập:

TempList.ForEach(Sub(obj) obj.Deleted = True) 

Nếu bạn đã có một lambda multiline; bạn sẽ không có vấn đề này:

TempList.ForEach(Function(obj) 
        obj.Deleted = True 
        Return True 
       End Function) 

Rõ ràng, đối với phương pháp ForEach nó làm cho không có ý nghĩa sử dụng một Function vì giá trị trả về sẽ không được sử dụng, vì vậy bạn nên sử dụng một Sub.

+0

Ahhh có ý nghĩa hoàn hảo ngay bây giờ, cảm ơn rất nhiều vì điều đó. Đó là tất cả vẫn còn khá mới với tôi :-) –

+0

Tôi phải thừa nhận rằng lúc đầu, tôi không biết điều gì đang xảy ra ;-) –

+0

Tôi ngạc nhiên trước mức độ mạnh mẽ của công cụ này, buộc bản thân tôi phải học điều này là LINQ. –

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