Ключова дума `Fault` в блока за опит

Докато изследвах сборка в рефлектор, попаднах на ключова дума fault в генериран от компилатора клас.

Някой от вас знае ли значението на тази ключова дума?

C#

private bool MoveNext()
{
    bool flag;
    try
    {
        // [...]
    }
    fault
    {
        this.Dispose();
    }
    return flag;
}

vb.net

Private Function MoveNext() As Boolean 
    Dim flag As Boolean
    Try 
        ' [...]
    Fault
        Me.Dispose
    End Try
    Return flag
End Function

person Bjørn-Roger Kringsjå    schedule 27.02.2014    source източник


Отговори (1)


Някой от вас знае ли значението на тази ключова дума?

да Не е валиден C#, но в IL е еквивалент на finally, но само ако е хвърлено изключение.

В C# няма пряка корелация, поради което декомпилаторът не може да го декомпилира до правилен C#. Можете да го емулирате с нещо като:

bool success = false;
try
{
    ... stuff ...
    success = true; // This has to occur on all "normal" ways of exiting the
                    // block, including return statements.
}
finally
{
    if (!success)
    {
        Dispose();
    }
}

Споменавам го в моята подробности за внедряването на итератор блок статия, която изглежда подходяща за вашия конкретен пример :)

person Jon Skeet    schedule 27.02.2014
comment
И така... излезе ли нещо от идеята yield do в тази статия? Освен това... fault звучи като хубаво допълнение към C# :) - person Corey; 09.02.2021
comment
@Corey: Не, страхувам се, че не. - person Jon Skeet; 09.02.2021