[英]Func for 5 arguments
我正在使用System.Func,但已經遇到了絆腳石。
System.Func<TReturn> // (no arg, with return value)
System.Func<T, TReturn> // (1 arg, with return value)
System.Func<T1, T2, TReturn> // (2 arg, with return value)
System.Func<T1, T2, T3, TReturn> // (3 arg, with return value)
System.Func<T1, T2, T3, T4, TReturn> // (4 arg, with return value)
它接受的最大為4個參數。
有什么辦法可以將此擴展到5個參數嗎?
移至更高版本的.NET Framework。 例如.NET 4.0最多有16個
http://msdn.microsoft.com/zh-CN/library/yxcx7skw.aspx
而3.5只有4
http://msdn.microsoft.com/zh-CN/library/yxcx7skw(v=VS.90).aspx
或者,如果您使用的是較低版本,則只需自己定義委托。
您有幾種選擇,一種是定義自己的委托,如下所示:
public delegate TResult Func<T1,T2,...,TN,TResult>(T1 arg1, T2 arg2,...,TN argN);
您基本上可以為任意數量的參數定義它(大於4,因為否則可能會導致名稱沖突)
或者,您可以將參數包裝到某種結構中,以便可以使用已經為您定義的Func委托之一。
無論如何,如果您不能使用預定義的Func委托之一,則應該擔心方法簽名。 通常,一長串的參數都是一種氣味,常常使您意識到該方法正在完成很多(不相關的)工作。
因此,我個人的方法是找出設計失敗的地方,然后糾正該問題,而不是糾正最常見的症狀(在這種情況下,使用足夠的量定義一個Func 可能是在修復該症狀,而不是說這是因為我沒有知道你的代碼)
我猜,在框架5.0中至少可以看到25個參數的Action和Func :)
沒有任何理由轉向更高版本的框架,因為我無法將代碼重構為有效的,可維護的視圖。 在函數簽名方法中使用這么多的參數確實不是一個好習慣。 使用具有5個字段或屬性的實體。 您可以在不更改方法或函數簽名的情況下使用此實體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.