用C#尽量简洁
本文关键字:简洁 | 更新日期: 2023-09-27 18:20:07
我正在寻找一种更简洁的方式来表达C#中的以下测试,其中x是可为null的int
英语:如果x有一个值并且y>x,那么做一些
C#使其更加简洁:
if(x.HasValue && y > x)
类似地,如果我想将可为null的布尔值(x)默认为false,我可能会写:
if(x ?? false)
{
//x is true
}
else
{
//x is either null or false
}
而不是:
if(x.HasValue() && x == true)
非常感谢
y > x
应该足够。
0 >= (int?)null // false
0 <= (int?)null // false
(OTOH,我被这种行为所困扰,我认为有些东西会"大于"null。在这种情况下,y > (x ?? 0)
或类似的东西可能会有用。)
来自Ben Voigt关于使用可空类型的评论:
当您与可为null的类型执行比较时,如果其中一个可为null类型的值为null,而另一个不为null,则除!=(不平等)重要的是不要假设因为特定的比较返回false,相反的情况返回true。
快乐的编码。
if(x.HasValue && y > x)
非常简洁,更不用说清晰了。变通办法多少有些做作。考虑:
if ((x ?? (y + 1)) < y)
正如pst所指出的,您实际上并不需要HasValue
调用。但为了清楚起见,将其包括在内可能是个好主意。
虽然可能有一种方法可以使语句更简洁,但我会避开它。您展示的用法非常地道,并且使您的意图清晰明了。依赖可为null的不等式运算符的行为(如@pst的回答)可能会导致对代码的误解,并淡化变量可为null这一事实。我会坚持你所拥有的。
您可以使用扩展方法。
public static class IntegerExtensions
{
public static bool IsLargerThan(this int? number, int numberToCompare)
{
return number.HasValue && number > numberToCompare;
}
}
...
// Usage:
int? val1 = 15;
int val2 = 10;
if (val1.IsLargerThan(val2))
{
// Do Something
}
您尝试过GetValueOrDefault()方法吗?
如果x是int?
,那么您的第一个If语句可以重写为if (x.GetValueOrDefault() > y)
。如果x是bool?
,那么它可以简单地重写为if(x.GetValueOrDefault())
。