Ich versuche, einen Teil meines Codes flüssiger zu machen.Erhalten einer parameterlosen Methode, um wie ein Func zu handeln <ReturnT>
Ich habe eine Zeichenfolge-Erweiterung, die eine HTTP-Anforderung aus der Zeichenfolge und die Antwort als Zeichenfolge zurückgibt. So kann ich so etwas wie ...
string _html = "http://www.stackoverflow.com".Request();
Ich versuche, eine Erweiterung zu schreiben, der die Anforderung halten versuchen, bis es gelingt. Meine Unterschrift sieht so etwas wie ...
public static T KeepTrying<T>(this Func<T> KeepTryingThis) {
// Code to ignore exceptions and keep trying goes here
// Returns the result of KeepTryingThis if it succeeds
}
Ich beabsichtige, es zu nennen so etwas wie ...
string _html = "http://www.stackoverflow.com".Request.KeepTrying();
Ach, die nicht zu funktionieren scheint =). Ich habe versucht, es zuerst zu einem Lambda zu machen, aber das scheint auch nicht zu funktionieren.
Gibt es eine Möglichkeit zu tun, was ich versuche, während die Syntax ziemlich flüssig bleibt? Vorschläge sehr geschätzt.
Danke.
Darn - Ich hatte gehofft, dass du es als var schreiben könnte html = KeepTrying ("..." anfordern.), Aber Methodengruppen und generische Art Inferenz nicht zusammen sehr gut spielen :( –
Das war meine letzte Option. – Fung
@ Sambo99 - Ich denke, es wird wirklich meine letzte Option sein. Grund ist für lange Lambdas, das Ende der KeepTrying wird durch die schließende Klammer begrenzt, die manchmal etwas schwieriger zu erkennen ist, zB Ke epTrying (() => _x.DoSomething(). DoMoreStuff(). AndThenSomeMore(). PlusSomeOfThisStuff()). SubString (0, 5); Habe trotzdem aufgewertet. Ich werde den letzten Vorschlag von Skeet mit einigen Funktionskettenhelfern verwenden. – Fung