Best syntax for a = (x == null) ? null : x.func()
c#, syntax
Solution
Well, you could use an extension method like this:
public static TResult NullOr<TSource, TResult>(this TSource source,
Func<TSource, TResult> func) where TSource : class where TResult : class
{
return source == null ? null : func(source);
}
Then:
var a = some_long_expression.NullOr(x => x.Method());
Or (depending on your version of C#)
var a = some_long_expression.NullOr(Foo.Method);
where `Foo` is the type of `some_long_expression`.
I don't think I would do this though. I'd just use the two line version. It's simpler and less clever - and while "clever" is fun for Stack Overflow, it's not usually a good idea for real code.
Problem
Basic question here - I have many lines of code that look something like: ``` var a = (long_expression == null) ? null : long_expression.Method(); ``` Similar lines repeat a lot in this function. `long_expression` is different every time. I am trying to find a way to avoid repeating `long_expression`, but keeping this compact. Something like the opposite of `operator ??`. For the moment I'm considering just giving in and putting it on multiple lines like: ``` var temp = long_expression; var a = (temp == null) ? null : temp.Method(); ``` But I was curious if there is some clever syntax I don't know about that would make this more concise.