2009-12-22 23 views

Trả lời

9

Bạn có thể tạo Func đại biểu của riêng mình hoặc bạn có thể đợi .NET 4 đến (bao gồm các đại diện được xây dựng trong FuncAction có tối đa 16 tham số).

Như những người khác đã đề cập, nếu bạn thấy mình cần một đại biểu có nhiều thông số này thì có lẽ đã đến lúc nghĩ về một số loại tái cấu trúc.

public delegate TResult Func<T1, T2, T3, T4, T5, TResult> 
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5); 

public delegate TResult Func<T1, T2, T3, T4, T5, T6, TResult> 
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6); 

public delegate TResult Func<T1, T2, T3, T4, T5, T6, T7, TResult> 
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7); 

public delegate TResult Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> 
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8); 

// etc 
+1

.Net 4 sẽ cho phép số không giới hạn? Nhân tiện, bạn có thể đăng một ví dụ cho các đại biểu 'Func' mà bạn đang nói đến không? – Geo

+1

Không, không phải số không giới hạn. Bạn có thể có tối đa 16 tham số –

+1

Tái cấu trúc? Không, quá sớm. Ngay cả 'String.Compare' có 7 tham số. – Mehrdad

2

Tạo đối tượng tham số, có lẽ?

Catalogue Refactor có Kindness good description.

,

Dan

+1

Sách phải đọc __CODE complete__ đề xuất tối đa 7 tham số. :-) –

+0

Tôi nghĩ Steve McConnell phải có một màn hình rất lớn để đọc chữ ký của phương thức;) Đồng ý hết lòng RE: Phải đọc. –

4

Trong Net 4, có quá tải đến 17 (cho hoặc mất) các thông số.

Cá nhân, tôi nghĩ đó là các loại hạt. Nếu bạn cần nhiều hơn 4 tham số, thì đã đến lúc tạo một lớp mới có tất cả các tham số bạn cần làm thuộc tính.

+2

Tôi tìm thấy nó một chút vô lý mà bạn cho rằng đó là "hạt". Ngay cả một trong những hoạt động cơ bản nhất, 'Array.Copy' có 5 tham số, cũng như các tham số' String.Compare' (** 7 **) và trong rất nhiều hàm có đầu vào item/offset/count và như vậy. – Mehrdad

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