簡體   English   中英

5個參數的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM