Ich schreibe ein Spiel mit C# und habe eine Reihe von Fällen gefunden, in denen eine Funktion einen Delegaten akzeptiert und ich versehentlich einen Funktionsnamen übergeben habe, anstatt einen Delegaten zu erstellen und zwischenzuspeichern, der stattdessen als Parameter verwendet wird. Dies führt dazu, dass für jeden Aufruf dieser Funktionen ein Delegatobjekt erstellt wird, das bei der Rückgabe der Funktion sofort zu einem Papierkorb wird.Wie vermeiden oder erkennen Sie implizite Delegat Inferenz in C#?
Ich würde gerne alle Orte finden, wo ich diesen Fehler gemacht habe, und ich würde es vorziehen, jede Zeile jeder Datei zu vermeiden, die nach ihnen sucht (es gibt Jahre Code). Ich habe gesehen, wie VB eine "Option strict" hat, die implizite Konstruktion von Objekten deaktiviert, was meiner Meinung nach für mich funktionieren würde, wenn C# diese Funktion hätte, aber ich glaube nicht, dass dies der Fall ist. Ich habe auch die Warnungsoptionen des Compilers überprüft, und auch hier scheint keiner davon zu helfen.
Gibt es eine einigermaßen bequeme Möglichkeit, diese durch implizite Delegaten-Inferenz erzeugten Objekte zu identifizieren, damit ich herausfinden kann, wo ich die Callbacks erstellen/zwischenspeichern muss, um den Müll zu vermeiden?
Gibt es einige Code-Beispiele Sie, wo zum Beispiel zur Verfügung stellen können, ein Visual Studio regex suchen könnten sie finden? – mellamokb
Nur so sehe ich, wenn finden Sie die Methode/Funktion, die einen Delegaten akzeptiert, dann mit der rechten Maustaste-> finden Sie Referenzen (obwohl dies bedeutet, jeden Aufruf manuell zu überprüfen). –
Haben Sie irgendwelche Beweise, dass dies tatsächlich ein Problem verursacht? Ich würde erwarten, dass die Leistungseinbußen in der überwiegenden Mehrheit der Fälle vernachlässigbar sind, verglichen mit dem Vorteil der Lesbarkeit, dass statt eines expliziten Caching eine Methodengruppenumwandlung verwendet wird. –