Fir*_*ake 187 c# coding-style nullable
我想知道对可空的bool进行条件检查最干净,最易理解的语法是什么.
以下是编码风格的好坏吗?有没有办法更好/更干净地表达条件?
bool? nullableBool = true;
if (nullableBool ?? false) { ... }
else { ... }
Run Code Online (Sandbox Code Playgroud)
尤其是if(nullableBool ?? false)部分.我不喜欢这种if (x.HasValue && x.Value)风格......
(不确定之前是否问过这个问题......找不到与搜索类似的内容)
Art*_*aru 328
我想很多人都专注于这个值可以为空的事实,并且不考虑他们真正想要的东西:)
bool? nullableBool = true;
if (nullableBool == true) { ... } // true
else { ... } // false or null
Run Code Online (Sandbox Code Playgroud)
或者如果你想要更多选择......
bool? nullableBool = true;
if (nullableBool == true) { ... } // true
else if (nullableBool == false) { ... } // false
else { ... } // null
Run Code Online (Sandbox Code Playgroud)
(nullableBool == true)如果布尔将永远不会返回真实?为空:P
Luc*_*ero 68
如何使用GetValueOrDefault,它非常自我解释并允许使用您想要的任何默认值:
if (nullableBool.GetValueOrDefault(false)) {
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*plo 44
你可能不喜欢它,但我个人觉得
if (x.HasValue && x.Value)
Run Code Online (Sandbox Code Playgroud)
最具可读性的.它清楚地表明您正在使用可空类型,并且它清楚地表明您首先检查可空类型是否具有值,然后有条件地对其进行操作.
如果你使用你的版本并用x替换变量,它会读取:
if (x ?? false)
Run Code Online (Sandbox Code Playgroud)
那是清楚的吗?显然x是可以为空的类型吗?我会让你决定.
Ode*_*ded 21
如果你想把a null视为false,那么我会说最简洁的方法是使用null coalesce operator(??),如你所描述的:
if (nullableBool ?? false) { ... }
Run Code Online (Sandbox Code Playgroud)
使用扩展名.
public static class NullableMixin {
public static bool IsTrue(this System.Nullable<bool> val) {
return val == true;
}
public static bool IsFalse(this System.Nullable<bool> val) {
return val == false;
}
public static bool IsNull(this System.Nullable<bool> val) {
return val == null;
}
public static bool IsNotNull(this System.Nullable<bool> val) {
return val.HasValue;
}
}
Nullable<bool> value = null;
if(value.IsTrue()) {
// do something with it
}
Run Code Online (Sandbox Code Playgroud)
小智 8
想想布尔?因为有3个值,事情会变得更容易:
if (someNullableBool == true) // only if true
if (someNullableBool == false) // only if false
if (someNullableBool == null) // only if null
Run Code Online (Sandbox Code Playgroud)
实际上,我认为这(nullableBool ?? false)是一个合理的选择,尤其是当您尝试在 linq 中评估可为空的 bool 时。
例如:
array.Select(v => v.nullableBool ?? false)
(from v in array where v.nullableBool ?? false)
Run Code Online (Sandbox Code Playgroud)
在我看来更清洁,而不是:
array.Select(v => v.nullableBool.HasValue ? v.nullableBool.Value : false)
(from v in array where v.nullableBool.HasValue ? v.nullableBool.Value : false)
Run Code Online (Sandbox Code Playgroud)
小智 5
让我们检查如何定义与 null 的比较:
static void Main()
{
Console.WriteLine($"null != null => {null != null}");
Console.WriteLine($"null == null => {null == null}");
Console.WriteLine($"null != true => {null != true}");
Console.WriteLine($"null == true => {null == true}");
Console.WriteLine($"null != false => {null != false}");
Console.WriteLine($"null == false => {null == false}");
}
Run Code Online (Sandbox Code Playgroud)
结果是:
null != null => False
null == null => True
null != true => True
null == true => False
null != false => True
null == false => False
Run Code Online (Sandbox Code Playgroud)
所以你可以安全地使用:
// check if null or false
if (nullable != true) ...
// check if null or true
if (nullable != false) ...
// check if true or false
if (nullable != null) ...
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用常量模式匹配:
if (nullableBool is true) {}
if (nullableBool is false) {}
if (nullableBool is null) {}
Run Code Online (Sandbox Code Playgroud)
与 operator 不同==,在阅读代码时,这会将可空类型检查与普通的“有味道的代码”区分开来。
| 归档时间: |
|
| 查看次数: |
103171 次 |
| 最近记录: |