2014-02-27 12 views
7

Beim Erkunden einer Baugruppe im Reflektor stolperte ich über ein fault Schlüsselwort in einer vom Compiler erzeugten Klasse.`Fault` Schlüsselwort in try Block

Kennt jemand von Ihnen die Bedeutung dieses Schlüsselworts?

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 

Antwort

10

Hat jemand von euch die Bedeutung, wenn dieses Keyword wissen?

Ja. Es ist kein gültiges C#, aber in IL entspricht es finally, aber nur, wenn eine Ausnahme ausgelöst wurde.

Es gibt keine direkte Korrelation in C#, weshalb der Decompiler es nicht in das richtige C# dekompilieren kann. Sie könnten emulieren es mit so etwas wie:

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(); 
    } 
} 

ich es in meinem iterator block implementation details Artikel erwähnen, die auf Ihr spezielles Beispiel relevant sehen :)

+0

Dank C# übersetzt werden Jon! Ich werde mir deinen Artikel ansehen. –

0

Ich denke try { ...; } fault { ...; } sollte try { ...; } catch { ...; throw; }

Verwandte Themen