J'ai un code à ressembler à ceci:
string target = ListOfTabs.FirstOrDefault(e.Target.Location.OriginalString.Contains);
3 Réponses :
Vous n'en avez pas besoin parce que La signature de FirstArdefault est la suivante: P> firstordfault code> Prenez un
Func code> dans le paramètre. Étant donné que
contient code> correspond au type demandé, vous pouvez passer
contient code> comme vous passeriez tout argument à une autre fonction.
var target = ListOfTabs.FirstOrDefault(e.Target.Location.OriginalString.Contains);
Normalement, ce serait une expression lambda, mais comme Dans la mise en œuvre de firstordfault code> Accepte un
Func
string.contains code> peut être distribué sur un
Func
listoftabs code> est
ienumerable
FirstOrdefault code>, la syntaxe
() code> sera utilisée pour exécuter
string.contains code>. p>.
est pratiquement la même chose que l'écriture p> FirstArdefault code> prend essentiellement une fonction comme argument. L'écriture
contient code> et
x => contient (x) code> sont des fonctions, de sorte que cela fonctionne! p> p>
En outre, même si la deuxième ligne de code est plus lisible et facile à comprendre, il a un coût car il crée de nouveaux objets.
@Orace Pas vrai
@ Canton7 Le lien que vous avez fourni affiche le compilateur de Lambda-version définit inutilement un nouveau [compilergénerated] code> méthode
@ORACE Cette question se compare à la création d'un délégué vs en ne la créant pas, et le délégué capture. Aucun des délégués dans la question ci-dessus ne capture
@Dai ouais j'ai trouvé cet étrange - je suis déjà Demandé à ce sujet sur Gitter . Je suppose que ce serait une optimisation inutile. Il est également inhabituel que le compilateur ne met pas en cache le délégué généré: normalement, il fait
@ Canton7 dans certains cas, il y a une capture de contexte: sharplab.io/... < / a>
@Orace correct, mais pas dans cette réponse, et certainement pas dans "la deuxième ligne de code", comme vous le prétendiez
@ Canton7 Nous ne savons pas où E code> est déclaré, est-ce dans le contexte local ou est-ce un champ d'objet actuel? Par convention de cas, il s'agit probablement d'un paramètre de la méthode actuelle et appartient au contexte local et doit être capturé.
@Orace c'est juste. Votre commentaire original pourrait faire avec quelques éclaircissements, puis
contient code> est une fonction,
contient (..) code> est un appel à la fonction.
Question associée .