2009-04-08 25 views
5

Tại sao biên dịch này:Từ điển và Lambdas vui

public Dictionary<ValueLineType, 
        Func<HtmlHelper, 
         string, 
         object, 
         Type, 
         string>> constructor = 
     new Dictionary<ValueLineType, 
         Func<HtmlHelper, 
          string, 
          object, 
          Type, 
          string>>(); 

nhưng không phải cái này khác với một tham số phụ trong Func (boolean):

public Dictionary<ValueLineType, 
        Func<HtmlHelper, 
         string, 
         object, 
         Type, 
         bool, 
         string>> constructor = 
     new Dictionary<ValueLineType, 
         Func<HtmlHelper, 
          string, 
          object, 
          Type, 
          bool, 
          string>>(); 

Hoặc tôi nhận được mù hoặc có điều gì đó khác tôi sẽ học hôm nay: D

+0

Nhân tiện, lỗi cho dòng thứ hai là: "Sử dụng loại chung 'System.Func ' yêu cầu '2' đối số loại" – antonioh

+3

BTW, từ khóa 'var' là bạn mới của bạn. Xem http://msdn.microsoft.com/en-us/library/bb383973.aspx và http://stackoverflow.com/questions/9033#9035. – lacop

+0

chắc chắn tốt hơn nhiều so với viết tất cả hai lần! – antonioh

Trả lời

18

Không có điều nào như Func<T1,T2,T3,T4,T5,TResult>. Nó chỉ đi xa như 4 thông số (ví dụ 5 loại thông số, bao gồm một cho giá trị trả về):

Func<T> 
Func<T1, TResult> 
Func<T1, T2, TResult> 
Func<T1, T2, T3, TResult> 
Func<T1, T2, T3, T4, TResult> 
SpinalTap<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> 

Bạn có thể tuyên bố riêng của bạn, tất nhiên:

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

Tuy nhiên, tại điểm đó tôi nghĩ rất cẩn thận về việc liệu bạn có thể đóng gói một số thông số đó lại với nhau hay không. Họ hoàn toàn không liên quan?

+0

Nhưng không có lý do bạn không thể thêm của riêng bạn vì họ chỉ là đại biểu với Generics. – Samuel

+0

Thật vậy. Đang chỉnh sửa ... –

+0

@Me: Thêm của riêng bạn với hơn 4 thông số. – Samuel

3

Có các lớp khác nhau được định nghĩa bởi khung làm việc có tên Func lấy từ 1 đến 5 tham số. Bạn sẽ cần phải xác định lớp học của riêng bạn mà phải mất 6.

+0

Func chỉ định nghĩa đến 4 tham số - nhưng tham số 5 * type *. –

10

FYI, phiên bản tiếp theo của các thư viện .NET sẽ bao gồm Func và hành động kiểu generic của hơn bốn thông số.