2016-07-01 12 views
3

Ich habe eine Methode mit einem out Parameter und ich möchte mit Contract.Ensures() angeben, dass, wenn die Methode zurückgibt, der Parameter nicht null ist.Wie spezifiziert man Sorgt für Out-Parameter?

Im Grunde ist dies:

void M(out object o) 
{ 
    Contract.Ensures(o != null); 

    o = new object(); 
} 

Diese nicht kompilieren, weil es wie der Parameter sieht gelesen werden, bevor sie zugewiesen wird:

Fehler CS0269: Die Verwendung von nicht zugeordneten out-Parameter 'o'

ich dachte, ich könnte dieses Problem beheben, indem die Linien um Schalt, aber das funktioniert auch nicht:

Warnung CC1005: CodeContracts: Fehlerhafter Vertrag. Found Sorgt nach Zuweisung in der Methode 'M (System.Object @)'.

Gibt es einen Weg, dies zu tun?

Ich möchte nicht die Methode zu ref wechseln. Ich kann den Wert nicht zurückgeben, anstatt out zu verwenden, da die tatsächliche Methode, in der ich diese bereits vorfand, einen Rückgabewert hat: bool TryGetValue(TKey1 key1, TKey2 key2, out TValue value).

+0

Welche C# Version verwenden Sie? – Karolis

Antwort

5

Die Methode Contract.ValueAtReturn ist speziell verfügbar, um den Fehler des C# -Compilers zu vermeiden.

Contract.Ensures(Contract.ValueAtReturn(out o) != null);