我目前正在努力研究大约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。这样的解决方案是不好的编程,而且它会以我想要的方式工作吗?
答案 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
}