Я пытаюсь создать функцию, которая может создать действие, которое увеличивает любое целое число. Однако моя первая попытка дает мне ошибку "не может использовать параметр ref или out внутри тела анонимного метода".
public static class IntEx {
public static Action CreateIncrementer(ref int reference) {
return () => {
reference += 1;
};
}
}
Я понимаю, почему компилятору это не нравится, но тем не менее я хотел бы иметь изящный способ предоставить хороший инкремент factory, который может указывать на любое целое число. Единственный способ, который я вижу для этого, - это что-то вроде следующего:
public static class IntEx {
public static Action CreateIncrementer(Func<int> getter, Action<int> setter) {
return () => setter(getter() + 1);
}
}
Но, конечно, это больше боль для вызывающего абонента; требуя, чтобы вызывающий пользователь создал два лямбда вместо того, чтобы просто передавать ссылку. Есть ли более изящный способ обеспечения этой функциональности, или мне просто нужно будет жить с вариантом с двумя лямбдами?