如何避免进行 == null 检查?

10

这是我在项目中广泛使用的代码,我想知道是否可以以某种方式进行重构,以避免一直进行 == null 检查?

 ActiveCompany = admin.Company == null ? false : admin.Company.Active

谢谢大家

干杯


公司 (Company) 会为空吗? - Matthew Watson
@MatthewWatson 是的 - Roxy'Pro
1
那么你无法避免检查它!但是,可以使用空值合并运算符 - 但仍然需要检查 null(但不使用 == 语法)。 - Matthew Watson
1
这取决于您使用的C#版本(6+)。admin.Company?.Active - Kaushik
admin.Company.Active是一个int还是可空int? - andyb952
3个回答

15
你可以使用 C# 6:Null-conditional Operator
ActiveCompany = admin.Company?.Active == true;
比较结尾处的true会将bool?转换为bool。您还可以使用空值合并运算符来处理null值,如Keith所示。

你能写一点关于这种方法的内容吗?这是一些C# 6-7的特性,那是什么? - Roxy'Pro
@Roxy'Pro https://blogs.msdn.microsoft.com/jerrynixon/2014/02/26/at-last-c-is-getting-sometimes-called-the-safe-navigation-operator/ - andresantacruz

12
空值合并运算符与空值条件运算符链式组合在这种情况下非常有用 :-)
ActiveCompany =  admin.Company?.Active ?? false

1
如果你发现自己经常这样做,你可以编写一个扩展方法来简化代码。
例如,假设你有以下类:
public sealed class Company
{
    public bool Active { get; set; }
}

public sealed class MyClass
{
    public Company Company;
}

那么你可以编写一个扩展方法,如下所示:

public static class MyClassExt
{
    public static bool IsActiveCompany(this MyClass myClass)
    {
        return myClass.Company?.Active ?? false;
    }
}

这意味着你可以编写像这样的代码:
var test = new MyClass();
// ...
bool activeCompany = test.IsActiveCompany();

这并没有让代码变得更短,但有些人可能认为它使代码更易读。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接