2017-01-02 35 views
-4

我们遵循的基本思路是与范围在C#中检查条件(不使用if else语句)

if (i > 0 && i < 100) { 

} else if (i > 100 && 1 < 150) { 

} 

这是范围检查的基本想法..

有没有检查什么好办法这些类型的条件。

在此先感谢您的帮助!

+0

你为什么不喜欢_if ......别的..._声明? – Steve

+0

你应该明确定义'这些类型的条件。'# – Badiparmagi

+0

http://stackoverflow.com/questions/20147879/switch-case-can-i-use-a-range-instead-of-a-one-number –

回答

1

INT endX = 200;

点击下面的链接,你会得到什么@Steve

var switchCond = new Dictionary<Func<int, bool>, Action> 
       { 
       { x => x <= 290 ,() => endX=244 }, 
       { x => x <= 530,() => endX=488 }, 
       { x => x <= 790 ,() => endX=732 }, 
       { x => x <=1000 || x > 976 ,() => endX=976 } 

       }; 
       switchCond.First(sw => sw.Key(endX)).Value(); 

[区别Switch case: can I use a range instead of a one number

0

使用三元运算

var range = 
    i < 100? "Range1": 
    i < 150? "Range2": 
    i < 200? "Range3": 
    i < 250? "Range4": 
    i < 300? "Range5": 
       "Range6"; 

这是实施例只显示技术。显然,您必须将其调整到您的代码目标和适当的范围定义。 (顺便说一下,在你的例子,使用if- else if,你的代码错过100,你需要决定哪些范围100应列入,并改变不平等的运营商之一,要么<=>=值。

+0

不确定这是否正确。对于'100',这种行为与OP的例子不同(但是,这个概念变得清晰了)。 –

+0

OPs示例不全面,值100根本没有被覆盖。 –

0

你可以有开关结构 “手柄” 范围通过使用你的边界的List的:

 List<int> bounds = new List<int>() {int.MinValue, 0, 100, 150, 200, 300, int.MaxValue }; 

     switch (bounds.IndexOf(bounds.Last(x => x < j))) 
     { 
      case 0: // <=0 
       break; 

      case 1: // > 0 and <=100 
       break; 
      case 2: // > 100 and <= 150 
       break; 
      case 3: // > 150 and <=200 
       break; 
      case 4: // > 200 and <=300 
       break; 

      case 5: // >300 
       break; 
     } 

,你可能有一些额外的检查添加到