160 votes

Func<T> avec paramètre de sortie</T>

Je peux passer une méthode avec un paramètre de sortie comme un Func ?

Func a besoin d’un type donc out ne compile il, et listFunction l’appel requiert un type int et ne permet pas une sortie en.

Y a-t-il un moyen de faire cela ?

218voto

Mehrdad Afshari Points 204872

et ne font pas partie de la définition de type de paramètre, vous ne pouvez pas utiliser la fonction intégrée délégué à passer et `` arguments. Bien sûr, vous pouvez déclarer votre propre délégué si vous voulez :

24voto

ChaosPandion Points 37025

Pourquoi ne pas créer une classe pour encapsuler les résultats ?

13voto

nawfal Points 13500

L' Func de la famille des délégués (ou Action d'ailleurs) ne sont rien, mais simple délégué des types déclarés comme

//.NET 4 and above
public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T obj)

//.NET 3.5
public delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
public delegate TResult Func<T1, T2, T3, TResult>(T1 obj1, T2 obj2, T3 obj3)

etc. Les délégués peuvent avoir/ref paramètres, donc dans votre cas son seulement une question de coutume de mise en œuvre par vous-même comme d'autres réponses ont souligné. Pourquoi Microsoft n'a pas ce pack par défaut, pensez à le grand nombre de combinaisons qu'il exigerait.

delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(T1 obj1, out T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, out T2 obj2)

pour seulement deux paramètres. Nous n'avons pas encore touché ref. Il serait fastidieux et source de confusion pour les développeurs.

0voto

Logan Capaldo Points 22145

Vous pourriez l’envelopper dans une lambda/délégué/fonction/méthode exposée la bonne interface et appelé FindForBar, mais je soupçonne que FindForBar a comte comme paramètre de sortie comme une raison, donc vous auriez besoin jeter pour s’assurer que l’information était OK/safe/souhaitable/a les bons résultats (vous auriez besoin pour être sûr de cela même si vous pouvez juste passer en FindForBar).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X