2010-11-22 13 views
25

estoy usando un delegado anónimo en mi código de llamar a esta función ejemplo:El uso de tipos de retorno vacío con nueva Func <T, TResult>

public static int TestFunction(int a, int b) { 
    return a + b; 
} 

El delegado tiene el siguiente aspecto:

var del = new Func<int, int, int>(TestFunction); 

Mi pregunta es: ¿cómo se especifica un tipo de devolución void para TResult? El siguiente no funciona:

public static void OtherFunction(int a, string b) { ... } 
var del = new Func<int, string, void>(OtherFunction); 

Respuesta

42

Si no hay ningún tipo de retorno, que desea Action<int,string>:

var del = new Action<int, string>(OtherFunction); 

o simplemente:

Action<int, string> del = OtherFunction; 
6

Usted tiene que usar Acción < T> si quieres regresar vacío

3

Es necesario Acción < T> si no desea devolver algo

0

Uso acción en lugar de Func si usted no necesita ningún valor de retorno

public void InvokeService<T>(Binding binding, string endpointAddress, Action<T> invokeHandler) where T : class 
    { 
     T channel = FactoryManager.CreateChannel<T>(binding, endpointAddress); 
     ICommunicationObject communicationObject = (ICommunicationObject)channel; 

     try 
     { 
      invokeHandler(channel); 
     } 
     finally 
     { 
      try 
      { 
       if (communicationObject.State != CommunicationState.Faulted) 
       { 
        communicationObject.Close(); 
       } 
      } 
      catch 
      { 
       communicationObject.Abort(); 
      } 
     } 
    } 
Cuestiones relacionadas