2012-05-14 29 views
5

Phương thức của tôi trả về ở nhiều điểm. Tôi xây dựng newData trong quá trình thực hiện cũng ở nhiều điểm. Bất kể nơi tôi trở về tôi cần phải lưu và lưu trữ kết quả xây dựng. Không bỏ lỡ "return" Tôi chỉ bao quanh mã với khối try-finally vì vậy bây giờ tôi chắc chắn rằng newData sẽ được lưu trữ.là tốt để sử dụng cố gắng cuối cùng chỉ để đảm bảo rằng một cái gì đó được thực hiện khi phương pháp kết thúc?

List<X> newData = new List<X>(); 
try 
{ 
    .... 
    update newData 
    ..... 
    return; 
    ..... 
    .... 
    update newData 
    .... 
    update newData 
    return; 
    ..... 
    return; 
} finally 
{ 
    // copy newData to data  
} 

Nhưng tôi không bắt bất kỳ ngoại lệ nào và mã này không có ý định làm việc với ngoại lệ. Có thể chấp nhận được nói chung hoặc bạn có thể đề xuất một cách tiếp cận tốt hơn?

+0

Có vẻ như bạn có thể sử dụng [báo cáo chuyển đổi] (http://msdn.microsoft.com/en-us/library/06tc147t%28v=vs.100%29.aspx). Tôi không hiểu tại sao bạn cần phải quay lại ngay lập tức. –

+0

Chỉ chấp nhận được nếu nó hoạt động như dự định. Nếu nó không hoạt động, hãy thử tái cấu trúc nó thành các hàm nhỏ hơn. Nếu có, thỏa thuận lớn là gì? Tôi không thể đưa ra bất kỳ đề xuất cụ thể nào mà không thấy mã nguồn chi tiết hơn. – Flaise

+0

Trừ khi ai đó kéo phích cắm, khối 'cuối cùng' được thực hiện trong mọi trường hợp và mã của bạn sẽ hoạt động như mong đợi; tuy nhiên, như những người khác đã chỉ ra, có những cách tốt hơn để cấu trúc mã của bạn. –

Trả lời

6

tôi sẽ đề nghị refactoring mã trong khối try vào một phương pháp mới:

data = CreateList(); 

... 

private List<X> CreateList() 
{ 
    List<X> list = new List<X>(); 
    // It's fine to return list from any point here... 
} 
+0

Đây gần như những gì tôi định đề xuất: Tôi sẽ thêm vào trong một số trường hợp, khi dễ đọc thì tốt hơn là đặt cơ thể 'CreateList' bên trong phương thức khác, một đại biểu' Action' có thể được sử dụng từ đó 'trả về' chỉ thoát khỏi phương thức ẩn danh đó. – hvd

+0

cảm ơn, đó là những gì tôi cần – javapowered

2

Việc sử dụng cuối cùng được dự định như là một bản sao lưu nếu có điều gì không (nghĩ về nó như một cơ chế không an toàn), bao gồm cả nguyên tử, vv ..

Nói chung việc xây dựng phương pháp của bạn là sai và bạn có thể cấu trúc lại nó, vì nhận được tất cả những lợi nhuận đó thường có nghĩa là bạn có thể tiếp cận một số thứ khác (ví dụ: sử dụng công tắc như ai đó trong các nhận xét được đề xuất) .

+0

'switch' không phải là những gì tôi cần. mã bên trong có nhiều nhánh và khó cấu trúc lại vì logic không phải là tầm thường – javapowered

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