Ich versuche, eine Funktion zu erstellen, die eine Aktion erstellen kann, die jede Integerzahl inkrementiert. Jedoch gibt mein erster Versuch mir einen Fehler "ref oder nicht verwenden kann out Parameter innerhalb eines anonymen Methodenkörpers ".C# Kann ref oder out Parameter nicht innerhalb eines anonymen Methodenkörpers verwenden
public static class IntEx {
public static Action CreateIncrementer(ref int reference) {
return() => {
reference += 1;
};
}
}
Ich verstehe, warum die Compiler dies nicht mögen, aber dennoch würde ich gerne eine anmutige Art und Weise haben, ein schönes Inkrementierer Werk zu schaffen, das auf jede ganze Zahl verweisen. Der einzige Weg, ich sehe dies zu tun, ist so etwas wie die folgende:
public static class IntEx {
public static Action CreateIncrementer(Func<int> getter, Action<int> setter) {
return() => setter(getter() + 1);
}
}
Aber natürlich, die mehr Schmerz für den Anrufer zu bedienen; Der Aufrufer muss zwei Lambdas erstellen, anstatt nur eine Referenz zu übergeben. Gibt es eine elegantere Möglichkeit, diese Funktionalität bereitzustellen, oder muss ich nur mit der Zwei-Lambda-Option leben?
Ist dies ein vereinfachtes Beispiel? Warum nicht x ++ benutzen? Warum ist ein weiterer Klassenerhöhungszustand dieser Klasse – Gishu
@Gishu Ja, dies ist ein vereinfachtes Beispiel; Der größere Anwendungsfall ist schwieriger zu erklären, aber es kommt darauf an, eine Aktionsfactory zu erstellen, die Operationen an Werttypen ausführen kann. –