我一直在搜索有关if语句的一些信息,但是找不到与myquestion相对应的内容。
我想知道你是否可以写:
int n = 3
if (3 < n < 20)
{
//do something..
}
而不是:
if (n > 3 && n < 20)
{
//do something..
}
第一句话对我来说并不适用,我觉得应该这样,因为它很简单。
也许有人可以给我正确的语法,或者说它根本不可能,我只需要使用AND。
答案 0 :(得分:9)
解释它无效的原因:
if (3 < n < 20)
可以改写为:
if ((3 < n) < 20)
现在3 < n
的结果将是一个布尔。
所以基本上你会得到:
if (true/false < 20)
在C#中无效。
答案 1 :(得分:4)
&&
显式条件 - 你可以创建一个扩展方法:
public static class IComparableExtensions
{
public static bool Between<T>(this T self, T low, T high) where T : IComparable
{
return self.CompareTo(low) > 0 && self.CompareTo(high) < 0;
}
}
并像这样使用它:
int n = 5;
if(n.Between(3, 20))
{
// do your stuff here
}
但请注意,这可能会造成混淆 - 因为Between
没有指定比较是否包含在一个方向的包容性,排他性或包容性 - 所以如果比较,比如{{1} } - 它应该返回true还是false?
更好的方法是需要在方法中添加另一个变量,以表明:
20.Between(10, 20)
现在你这样使用它:
[Flags]
public enum CompareMode
{
Exclusive = 0,
IncludeLow = 1,
IncludeHigh = 2,
Inclusive = IncludeLow | IncludeHigh
}
public static class IComparableExtensions
{
public static bool Between<T>(this T self, T low, T high, CompareMode mode) where T : IComparable
{
var compareLow = (mode & CompareMode.IncludeLow) == CompareMode.IncludeLow ? 0 : 1;
var compareHigh = (mode & CompareMode.IncludeHigh) == CompareMode.IncludeHigh ? 0 : -1;
return self.CompareTo(low) >= compareLow && self.CompareTo(high) <= compareHigh;
}
}
You can see a live demo on rextester.
这样,另一个阅读此代码的人(或者甚至是你,6个月后)将立即知道,而不必查看if(n.Between(3, 20, CompareMode.Exclusive))
{
// do your stuff here
}
扩展方法,如果介于两者之间是包容性,排他性或其他什么。< / p>
答案 2 :(得分:0)
一般来说,你不想做什么。
但在您的逻辑中,如果您想执行单线性逻辑,则可以使用三元运算符。
例如。你需要将n的值赋给variblae result
,否则它应该是0默认值。
int result = n > 3 ? (n < 20 ? n : 0) : 0
等同于
int result = 0;
if (n > 3 && n < 20)
{
result = n;
}