整数を何回もインクリメントするアクションを作成できる関数を作成しようとしていますが、最初の試みでは "refを使用できません。 「匿名メソッド本体の中のoutパラメータ」を参照してください。C#匿名メソッド本体の内部でrefまたはoutパラメータを使用できません
public static class IntEx {
public static Action CreateIncrementer(ref int reference) {
return() => {
reference += 1;
};
}
}
コンパイラはこれを好きではない理由を私は理解し、それにもかかわらず、私は、任意の整数を指すことができる素敵なインクリメンタ工場を提供するために、優雅な方法を持ってしたいと思います。私はこれを行うために見ている唯一の方法は、以下のようなものです:
public static class IntEx {
public static Action CreateIncrementer(Func<int> getter, Action<int> setter) {
return() => setter(getter() + 1);
}
}
でも使う呼び出し側のための痛みの詳細です、もちろん。参照を渡す代わりに2つのラムダを作成する必要があります。この機能を提供するための優雅な方法はありますか?それとも、2ラムダオプションを使用するだけですか?
これは簡単な例ですか? x ++を使わないのはなぜですか?このクラスの別のクラスをインクリメントする理由は? – Gishu
@ Gishuはいこれは単純な例です。大規模なユースケースは説明するのが難しいですが、すべて値型の操作を実行できるActionファクトリを作成することになります。 –