我正在尝试退出using语句,同时保持一个封闭的for循环。例如。
for (int i = _from; i <= _to; i++)
{
try
{
using (TransactionScope scope = new TransactionScope())
{
if (condition is true)
{
// I want to quit the using clause and
// go to line marked //x below
// using break or return drop me to line //y
// outside of the for loop.
}
}
} //x
}
//y
我已经尝试过使用break来解决这个问题,但是我希望保持在// x的for循环中,以便for循环继续处理。我知道我可以通过抛出异常并使用catch来实现它,但是如果有一种更优雅的方式来突破使用,我宁愿不做这个相对昂贵的操作。谢谢!
答案 0 :(得分:8)
完全省略使用:
if (condition is false)
{
using (TransactionScope scope = new TransactionScope())
{
....
答案 1 :(得分:4)
不需要打破using
块,因为使用块不会循环。你可以直接走到最后。如果存在您不想执行的代码,请使用if
- 子句跳过它。
using (TransactionScope scope = new TransactionScope())
{
if (condition)
{
// all your code that is executed only on condition
}
}
答案 2 :(得分:3)
只需更改if
即可在条件为真的情况下输入块。然后将其余代码放在该块中。
答案 3 :(得分:3)
正如@Renan所说,你可以使用!
运算符并在条件上反转你的bool结果。您还可以使用continue
C#keyworkd转到循环的下一项。
for (int i = _from; i <= _to; i++)
{
try
{
using (TransactionScope scope = new TransactionScope())
{
if (condition is true)
{
// some code
continue; // go to next i
}
}
}
}
答案 4 :(得分:1)
我会颠倒逻辑并说:
for (int i = _from; i <= _to; i++)
{
try
{
using (TransactionScope scope = new TransactionScope())
{
if (condition is false)
{
// in here is the stuff you wanted to run in your using
}
//having nothing out here means you'll be out of the using immediately if the condition is true
}
} //x
}
//y
另一方面,如果你像Dave Bish建议的那样完全跳过使用,你的代码会表现得更好,因为在你不想使用它的情况下,你不会创建一个对象,只是不做任何事情。
答案 5 :(得分:0)
我想知道你为什么要在for循环中创建事务范围?有必要吗?可能导致可能升级到DTC?为什么不喜欢这个?
using (TransactionScope scope = new TransactionScope())
{
for (int i = _from; i <= _to; i++)
{
if (condition)
{
// Do the do
continue;
}
}
}
答案 6 :(得分:0)
我只是想知道同一件事。给出的答案均不符合我的情况。然后我想通了:
异常通常是一些错误的标志。它们对于基本的流量控制也很有用。
for (int i = _from; i <= _to; i++)
{
try
{
using (TransactionScope scope = new TransactionScope())
{
if (condition is true)
{
throw new Exception("Condition is true.");
}
}
}
catch(Exception exception)
{
Console.WriteLine(exception.Message);
}//x
}
//y
答案 7 :(得分:0)
您可以使用标签,并使用goto label
跳出using(()语句。
using (var scope = _services.CreateScope())
{
if (condition) {
goto finished;
}
}
finished:
// continue operation here
答案 8 :(得分:-1)
您是否尝试过使用
continue;