foreach中的三元运算符

时间:2010-09-01 09:00:00

标签: c#

我目前正在努力研究大约5个嵌套的if语句,并且看起来很困惑。

所以,我考虑添加三元运算符而不是ifs进行简单检查,参见

foreach (String control in controls)
{
 if (!control.Equals(String.Empty))
 {
   // Do some stuff
   foreach (Int32 someStuff in moreStuff)
   {
    if (!someStuff.Equals(0))
    {
     // More stuff with more if equals
    }
   }
 }

这就是现在的样子。这就是我如何让它看起来更漂亮的想法:

foreach (String control in controls)
{
 (control.Equals(String.Empty)) ? continue : null;
 // Do some stuff
 foreach (Int32 someStuff in moreStuff)
 {
  (someStuff.Equals(0)) ? continue : null;
  // More stuff
 }
}

所以,问题是:1。这样的解决方案是不好的编程,而且它会以我想要的方式工作吗?

4 个答案:

答案 0 :(得分:12)

不,它不会,三元运算符必须在:的左侧和右侧有值。

假设你使用的是.NET 3.5及更高版本,你可以这样做:

foreach( string control in controls.Where(c => !c.Equals(string.Empty)) )
{
    foreach( int someStuff in moreStuff.Where(s => !s.Equals(0)) )
    {
    }
}

答案 1 :(得分:5)

如何将内部代码拆分为单独的函数?

foreach (String control in controls)
{
 if (!control.Equals(String.Empty))
 {
   foo(control);
 }
}

答案 2 :(得分:3)

你为什么不这样做?

foreach (String control in controls)
{
 if(control.Equals(String.Empty))
      continue;
 // Do some stuff
 foreach (Int32 someStuff in moreStuff)
 {
  if(someStuff.Equals(0))
      continue;
  // More stuff
 }
}

Imho,它的可读性更高:)

答案 3 :(得分:2)

不,那根本不起作用。条件运算符不允许您更改流控制 - 它只是根据第一个表达式计算第二个或第三个表达式。条件表达式的结果是评估任何表达式的结果(在应用任何所需的转换之后)。

LINQ很可能会让你的生活变得相当容易,尽管你需要提供一个更完整的例子来说明你想做什么才能说清楚。

编辑:只是为了替代戴夫的答案:

var query = from control in controls
            where control != ""
            from someStuff in moreStuff
            where someStuff != 0
            select new { control, someStuff };

foreach (var result in query)
{
    // Do things with result.control and result.someStuff
}