检查类型而不是null是一个合理的选择吗?

mag*_*tic 5 .net c# null

我的一个(高级)同事在他的代码中做了一些非常奇怪的事情.

他没有检查变量是否为null,而是检查类型.因为

null是FooType

实际上返回false,这是有效的.

public class Foo
{
    private string _bar = null;

    public string Bar
    {
        get
        {
            // strange way to check for null
            return (_bar is string) ? _bar : "";
        }
        set { _bar = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这是糟糕的编码,Resharper似乎同意我的看法.有没有理由以这种方式写支票?

这是检查变量的有效方法吗?或者这可以被认为是不好的风格,甚至可能在某些特殊情况下有害?

除非我确定这实际上没有意义,否则我不想与他对抗.

Osk*_*lin 10

这不是一个好方法.更好的方法是:

return _bar ?? string.Empty;
Run Code Online (Sandbox Code Playgroud)

当您阅读同事代码时他是否正在寻找空值?不,那不是一个好选择.也许"is"运算符首先要做的只是检查null然后返回false.因此,自己做到这一点变得更加清洁.或者只使用null-coalescing运算符

  • @atticae这是否有效地使用它? (2认同)