Désolé pour la nécromancie, mais j'avais ce même problème et j'ai résolu cela en utilisant une opération lambda. Ce n'est pas le plus joli, mais il garde mon code succinct.
Il est dommage C# ne supporte pas les importations statiques ou les importations de fonction individuelles, mais de toute façon:
Définir cette fonction quelque part:
private static TResult N<TParent,TResult>(TParent parent, Func<TParent,TResult> operation) {
if(parent == null) return default(TResult);
return operation(parent);
}
ensuite l'utiliser dans votre exemple:
String endString = N(startString, s => s.Trim());
La fonction N
renvoie null
si le premier argument est null, sinon il évaluera la fonction lambda spécifiée. avec la valeur comme argument.
Vous pouvez l'imbriquer, bien sûr, comme ça. Par exemple, pour déréférencer en toute sécurité une longue chaîne, par ex.
String someValue = someObject.SomeProperty.SomeOtherProperty.SomeMethod().SomeFinalProperty;
si l'une de ces propriétés ou méthodes renvoie NULL alors vous devez insérer des chèques nuls partout, ou vous pouvez le faire:
String someValue = N(N(N(N(someObject, o => o.SomeProperty), o => o.SomeOtherProperty), o => o.SomeMethod()), o => o.SomeFinalProperty);
Comme je l'ai dit, ce n'est pas la plus jolie :)
Vous pouvez simplifier cela en faisant N
une méthode d'extension de System.Object
, comme ceci:
String someValue = someObject.N(o => o.SomeProperty).N(o => o.SomeOtherProperty).N(o => o.SomeMethod()).N(o => o.SomeFinalProperty);
... qui je pense est beaucoup plus ordonné.
Je ne pense pas, tbh ce qui ne va pas avec '! String.IsNullOrEmpty (startString)? startString.Trim(): null; ' – flq
Comme je comprends votre question, vous voulez propager null c'est-à-dire Si la chaîne est null, retourner null. Sinon, renvoyez la chaîne tronquée. Est-ce exact? Si tel est le cas, il n'y a pas d'opérateur intégré ou de méthode pour le faire. Vous pouvez utiliser un opérateur ternaire (comme vous l'avez fait) ou écrire une méthode. –
J'attends toujours que cet opérateur fasse partie de la langue :( – PedroC88