Puis-je passer des paramètres supplémentaires à une fonction de prédicat?
J'en ai besoin dans un processus de tri. p> où j'aimerais utiliser le Comparaison code> Prédicat dans ce formulaire: P>
public delegate int Comparison<T>(
T x,
T y,
object extraParameter
)
3 Réponses :
Non, mais vous pouvez le faire:
public Comparison<T> MakeComparison<T>(object extraParameter) { return delegate(T x, T y) { // do comparison with x, y and extraParameter } }
Capturez simplement les variables dont vous avez besoin lorsque vous déclarez le prédicat. Par exemple:
Un peu en retard à la fête, donc je me réponds au cas où n'importe qui apparaît ici par une recherche Google (comme je l'ai fait).
Vous ne pouvez pas passer plus que le paramètre, mais vous pouvez faire un tour pour esquiver cette limitation: p>
le faire pour que le prédicat nécessite un TUPLE (ou VALUE TUPLE), de cette façon, vous pouvez passer plus de valeurs en créant le tuple et en le transmettant au prédicat. Autant que je sache, le plus grand tuple a un maximum de 3 paramètres, mais vous pouvez facilement créer vos propres tuples si vous devez passer plus de paramètres. P>
EDIT1: La raison pour laquelle j'ai suggéré cela au lieu des réponses ci-dessus au lieu des réponses ci-dessus. Est-ce que parfois, vous ne déclarez pas le prédicat directement et que vous utilisez plutôt une méthode qui renvoie BOOL comme prédicat. p>
par exemple: p>
public class Tuple<T1,T2,T3,T4> { public T1 Item1; public T2 Item2; public T3 Item3; public T4 Item4; public Tuple(T1 item1, T2 item2, T3 item3, T4 item4) { Item1 = item1; Item2 = item2; Item3 = item3; Item4 = item4; } } public struct ValueTuple<T1,T2,T3,T4> { public T1 Item1; public T2 Item2; public T3 Item3; public T4 Item4; public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4) { Item1 = item1; Item2 = item2; Item3 = item3; Item4 = item4; } }