Estoy intentando crear una función que pueda crear una acción que incremente el entero que se pasa. Sin embargo, mi primer intento me da un error "no puedo usar ref o parámetro dentro de un cuerpo de método anónimo ".C# No se puede utilizar el parámetro ref o out dentro de un método anónimo body
public static class IntEx {
public static Action CreateIncrementer(ref int reference) {
return() => {
reference += 1;
};
}
}
entiendo por qué el compilador no le gusta esto, pero no obstante me gustaría tener una forma elegante para proporcionar una fábrica incrementador agradable que puede apuntar a cualquier número entero. La única manera de que estoy viendo de hacer esto es algo como lo siguiente:
public static class IntEx {
public static Action CreateIncrementer(Func<int> getter, Action<int> setter) {
return() => setter(getter() + 1);
}
}
Pero por supuesto que es más de un dolor de la persona que llama a utilizar; requiriendo que la persona que llama cree dos lambdas en lugar de solo pasar una referencia. ¿Hay alguna forma más elegante de proporcionar esta funcionalidad, o tendré que vivir con la opción de dos lambda?
¿Es este un ejemplo simplificado? ¿Por qué no usar x ++? ¿Por qué hay otro estado de incremento de clase de esta clase? – Gishu
@Gishu Sí, este es un ejemplo simplificado; el caso de uso más grande es más difícil de explicar, pero todo se reduce a la creación de una fábrica de Acción que puede realizar operaciones en tipos de valores. –