c# - referencia - ¿Hay una mejor manera de expresar un lambda sin parámetros que()=>?
ref c# (4)
Esencialmente, lo que estás buscando es el inverso del ??
nulo coalescente operador (que se llama Nullable<T>.GetValueOrDefault()
bajo las sábanas) - problema es C # no proporciona una respuesta ordenada OOTB.
No sé exactamente lo que estás haciendo, sino lo que estás haciendo:
ExternalId.IfNotNullDo(()=>ExternalId=ExternalId.Trim());
también puede encontrar un uso para:
class NullExtensions
{
public T DefaultOr<T>( this T that, Func<T> transform)
{
return that!=default(T) ? transform(that) : default(T);
}
}
que permitiría:
var result = input.DefaultOr( _ => _.Trim());
(En general, estaría tratando de alejarme de las variables de reutilización / mutación como parece estar haciendo y en lugar de ir en una dirección de Introducir Explicar Variable / División Variable Temporal, es decir, usar una nueva variable en lugar de value = value.DefaultOr( _ => _.Trim());
)
El ()
parece tonto. hay una mejor manera?
Por ejemplo:
ExternalId.IfNotNullDo(() => ExternalId = ExternalId.Trim());
Más o menos! Hay una nueva expresión idiomática en la ciudad, eso es bueno y puede ayudarte en algunos casos. No es completamente lo que quieres, pero a veces creo que te gustará.
Como el guión bajo ("_") es un identificador de C # válido, se está convirtiendo en una expresión común para usarlo como un nombre de parámetro para una lambda en los casos en los que planea ignorar el parámetro de todos modos. Si otros codificadores son conscientes de la expresión idiomática, sabrán inmediatamente que el parámetro es irrelevante.
Por ejemplo:
ExternalId.IfNotNullDo( _ => ExternalId=ExternalId.Trim());
Fácil de escribir, transmite tu intención y también es más fácil para los ojos.
Por supuesto, si pasa su lambda a algo que espera un árbol de expresiones, puede que esto no funcione, porque ahora está pasando un lambda de un parámetro en lugar de un lambda sin parámetro.
Pero para muchos casos, es una buena solución.
No, no hay. Las expresiones Lambda están optimizadas (en términos de sintaxis) para el caso de parámetro único.
Sé que el equipo C # siente tu dolor y has tratado de encontrar una alternativa. Si alguna vez habrá uno o no será un asunto diferente.
Para una lambda, no: necesitas () =>
¿Es para un delegado o una expresión? Para los delegados, otra opción es delegate {...}
. Esto puede o no ser deseable, dependiendo de la situación. Es más llaves, sin duda ...
En algunos casos (no en este) puede usar un método objetivo directamente, es decir,
ExternalId.IfNotNullDo(SomeMethod);