2012-02-11 43 views
24

有一些類似的問題,但不完全像我的。void Func無參數

是否有沒有返回值(即void)和沒有參數的函數的Func等價物?

相關問題是Func not returning anything? 但這不適用於void類型。

(我需要它從我的視圖模型請求動作到我的視圖)。

+0

@Anthony Pegram:但我需要填寫型的動作和無效的可能性也不大(我將編輯我的問題,我犯了一個錯誤)。 – 2012-02-11 23:38:17

回答

37

你的措辭令人困惑。您可能是指「沒有返回類型且沒有參數的功能。」有簡單的System.Action

Action action =() => Console.WriteLine("hello world"); 
action(); 

從您的評論:

但我需要填寫在行動和無效的一個<T>類型的可能性也不大(我將編輯我的問題,我犯了一個錯誤)。

這表示一種誤解。行動代表中的T是輸入。該空白是輸出。一個Action委託本質上是一個返回void的委託。 T是輸入的類型它可以處理參數,然後您將提供參數。

無論如何,正如此答案和其他人所顯示的那樣,您可以擁有一個沒有任何T的Action委託,一個不接受任何輸入的委託。

+3

是的,我完全錯過了是可選的。謝謝(和其他人)的幫助。 – 2012-02-11 23:42:52

+0

@anthony如何在3.5之前的.NET Framework中執行此操作。沒有委託行動。只有代表行動。 – 2014-08-26 09:07:59

+0

@ ph1983,在C#3之前,您可以使用委託,儘管C#2.0添加了對*匿名方法*的支持。我沒有正確的示例問題,但是您可以閱讀[MSDN]上的功能(http://msdn.microsoft.com/zh-cn/library/0yw3tz5k.aspx)。 – 2014-08-26 16:06:02

3

你在找什麼是一個行動。它不帶參數,並且不返回任何值。

13

是的,有不同的過載Action採取不同數量的輸入參數和void返回類型。

Action    public delegate void Action() 
Action<T>    public delegate void Action<T>(T obj) 
Action<T1,T2>   public delegate void Action<T1,T2>(T1 arg1, T2 arg2) 
Action<T1,T2,T3>  public delegate void Action<T1,T2,T3>(T1 arg1, T2 arg2, T3 arg3) 
... 

第一行是你要找的。

較新的框架版本增加了重載甚至更多的參數。 的參數的最大數量:

  • 的.NET Framework 2.0:   
  • 的.NET Framework 3.5:   
  • .NET框架4。0:
  • 的Silverlight:                                   

操作始終一個void返回類型。 A void返回類型不需要,也不能指定爲泛型類型參數。相比之下,Func代表界定「真正」的返回類型,並一直爲返回類型的至少一個泛型類型參數:

Func<TResult>   public delegate TResult Func<TResult>() 
Func<T,TResult>   public delegate TResult Func<T,TResult>(T arg) 
Func<T1,T2,TResult>  public delegate TResult Func<T1,T2,TResult>(T1 arg1, T2 arg2) 
... 

的.NET Framework 4.0增加了inout修飾的泛型類型反變量和協方差的參數。請參閱:Covariance and Contravariance in Generics。例子:

public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2) 

public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2) 
相關問題