对Catch Block内代码的限制

时间:2015-05-27 11:29:52

标签: c#

我们可以在c#中的try catch的Catch块中编写任何代码语句, 或者我们不能或不应该在C#的Catch块内写什么限制?

1 个答案:

答案 0 :(得分:1)

你不能在catch区内yieldawait。所以以下两个不会编译:

public IEnumerable<int> SomeSequence()
{
    try
    {
        //do something
    }
    catch
    {
        yield 1; //error
    }
}

public async int SomeFuncAsync()
{
    try
    {
        //do something
    }
    catch
    {
        await Task.Delay(1000); //error
    }
}

你可以轻松解决这个问题:

public async int SomeFuncAsync()
{
    Exception ex = null;
    try
    {
        //do something
    }
    catch(Exception exc)
    {
        ex = exc;
    }
    if(ex != null) await Task.Delay(1000); // no error
}