C# 如何避免==空检查?

C# 如何避免==空检查?,c#,null,C#,Null,这是我在项目中广泛使用的代码,我想知道我是否可以以某种方式重构它,这样我就可以避免一直进行==null检查 ActiveCompany = admin.Company == null ? false : admin.Company.Active 谢谢各位 干杯您可以使用C#6: 最后与true的比较将bool?转换为bool。您还可以使用null合并运算符来处理如Keith所示的null值。与null CONTATIONAL链接的null合并运算符对于此类操作非常有用:- ActiveCom

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

 ActiveCompany = admin.Company == null ? false : admin.Company.Active
谢谢各位

干杯

您可以使用C#6:


最后与
true
的比较将
bool?
转换为
bool
。您还可以使用null合并运算符来处理如Keith所示的null值。

与null CONTATIONAL链接的null合并运算符对于此类操作非常有用:-

ActiveCompany =  admin.Company?.Active ?? false

如果您发现自己经常这样做,您可以编写一个扩展方法来简化代码

例如,假设您有以下类:

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();

这不会使代码变得更短,但有些人可能会认为这会使代码更可读。

那么,
Company
可以为空吗?@matthewswatson-yes,你不能避免检查它!但是,可以使用null合并运算符-但这仍然是检查null(但没有
=
语法)。这取决于您使用的是哪个版本(6+)的c#
admin.Company?.Active
admin.Company.Active是int还是可为null的int?你能写一点关于这种方法的内容吗?这是一些C#6-7的功能,那是什么?@Roxy'Pro
var test = new MyClass();
// ...
bool activeCompany = test.IsActiveCompany();