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