Ci scusiamo per la negromanzia, ma stavo avendo lo stesso problema e l'ho risolto utilizzando un'operazione lambda. Non è il più bello, ma mantiene il mio codice succinto.
E 'un peccato C# non supporta le importazioni statiche o importazioni di funzioni individuali, ma in ogni caso:
Definire questa funzione da qualche parte:
private static TResult N<TParent,TResult>(TParent parent, Func<TParent,TResult> operation) {
if(parent == null) return default(TResult);
return operation(parent);
}
Poi usarlo nel tuo esempio:
String endString = N(startString, s => s.Trim());
La funzione N
restituisce null
se il primo argomento è nullo, altrimenti valuterà la funzione lambda specificata avanti con il valore come argomento.
È possibile nidificare, ovviamente, in questo modo. Ad esempio, per dereferenziare in sicurezza una lunga catena, ad es.
String someValue = someObject.SomeProperty.SomeOtherProperty.SomeMethod().SomeFinalProperty;
se una di queste proprietà o metodi restituisce null allora è necessario inserire controlli nulli ovunque, o si potrebbe fare questo:
String someValue = N(N(N(N(someObject, o => o.SomeProperty), o => o.SomeOtherProperty), o => o.SomeMethod()), o => o.SomeFinalProperty);
Come ho già detto, non è la più bella :)
Si potrebbe semplificare questo facendo N
un metodo di estensione di System.Object
, in questo modo:
String someValue = someObject.N(o => o.SomeProperty).N(o => o.SomeOtherProperty).N(o => o.SomeMethod()).N(o => o.SomeFinalProperty);
... che penso sia molto più ordinato.
Non penso, tbh cosa c'è di sbagliato in '! String.IsNullOrEmpty (startString)? startString.Trim(): null; ' – flq
Come ho capito la tua domanda, vuoi propagare null ie se la stringa è nullo, restituire null. Altrimenti, riaccendere la corda tagliata. È corretto? Se questo è il caso, non c'è un operatore o un metodo integrato per farlo. Puoi usare un operatore ternario (come hai fatto) o scrivere un metodo. –
Sto ancora aspettando che questo operatore faccia parte della lingua :( – PedroC88