var foo = context.FOOTABLE.FirstOrDefault();  var bar = foo != null ? foo.SomeBool : false;   Resharper tells me to Simplify conditional ternary expression. But I feel like a null check is necessary here, since FirstOrDefault() can return null.
So, who's wrong, me or Resharper?
First, a full example:
class Foo {     public bool SomeBool { get; set; } }  class Program {     static void Main(string[] args)     {         var foo = MaybeFoo();          var bar = foo != null && foo.SomeBool;      }      static Foo MaybeFoo()     {         return new Random().Next() < 10 ? null : new Foo();     } }  Here MaybeFoo is a method that sometimes returns null and sometimes returns a Foo. I've used Random so that R# doesn't automatically work out that it's always null or not-null.
Now, as you say on this line:
        var bar = foo != null ? foo.SomeBool : false;  R# offers the inspection Simplify conditional operator. What does it mean by this? Well, as usual, we can Alt+Enter and accept the suggestion and see what it wants to replace it with, which in this case is:
        var bar = foo != null && foo.SomeBool;  Now, as to your concern:
But I feel like a null check is necessary here, since FirstOrDefault() can return null.
So, who's wrong, me or Resharper?
Well, to put it shortly, you are. There's still a null check taking place here, and the && operator is short-circuiting, so the second operand (foo.SomeBool) will only be evaluated if the first one is true. So there won't be a NullReferenceException in the case when foo is null; the first check will fail and bar will be assigned false.
So the two lines
        var bar = foo != null ? foo.SomeBool : false;  and
        var bar = foo != null && foo.SomeBool;  are semantically equivalent, and R# as usual prefers the more concise version (in particular, explicit trues and falses in conditionals are often a mark of redundant code). You may not, in which case you could turn off this inspection.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With