2010-08-11 8 views
0

J'ai un délégué:Func <> et Action <> ne peut pas être trouvé

delegate ResultType Caller<ResultType>(IPtxLogic logic); 

Voici une fonction:

private ResultType ExecuteLogicMethod2<ResultType>(string sessionId, 
    Caller<ResultType> action) 
    where ResultType : IResult, new() 
    {...} 

Je veux remplacer la signature de la fonction avec quelque chose comme ça :

private ResultType ExecuteLogicMethod2<ResultType>(string sessionId, 
    Action<IPtxLogic, ResultType> action) 
    where ResultType : IResult, new() 
    {...} 

compilateur me dit:

L'utilisation du type générique de 'System.Action' exige '1' arguments de type

Pourquoi? Comment puis-je avoir accès à la classe .NET standard?

Merci. Toute pensée est la bienvenue.

P.S. J'ai créé mon délégué personnalisé pour résoudre le problème, mais ... Je ne veux pas créer délégué personnalisé pour chacun de mes « action personnalisée » ...

delegate ResultType Action<ParameterType, ResultType>(ParameterType param); 

P.P.S. J'utilise .NET 3,5

Répondre

0

leppie, votre pensée originale avait raison:

  1. Je dois ajouter assembly 'System.Core' dans le projet!
  2. -je utiliser Func <> // mais ce n'est pas un noyau du problème

Merci.

Ces types sont inclus dans 3.5 out-of-the-box: http://msdn.microsoft.com/en-us/library/bb534960.aspx

Informations sur la version .NET Framework en charge dans: 4, 3.5

4

Assurez-vous que vous faites référence à System.Core.dll et using System.Linq;

À la réflexion. Vous utilisez Action à la place de Func. Vous avez besoin de Func<IPtxLogic, ResultType>.

+1

'' Action' et Func 'sont dans l'espace de noms' System'. Cependant, le message d'erreur de l'OP indique qu'ils ont 'using System;' mais il manque une référence à _System.Core.dll_. –

+0

@Tim Robinson: Non, ce n'était pas ça :) – leppie

Questions connexes