6

In diesem Beispiel Konsolenanwendung zugreifen:Kann nicht Eigentum von anonymen Typ in den Debug-Modus (VS2013)

class Program 
{ 
    static void Main() 
    { 
     DoAsyncFoo(); 
     Console.ReadKey(); 
    } 

    private static async void DoAsyncFoo() 
    { 
     var task = CollectStatsAsync(); 
     dynamic foo = await task; 
     Console.WriteLine(foo.NumberOfCores); 
    } 

    private static async Task<dynamic> CollectStatsAsync() 
    { 
     return CollectStats(); 
    } 

    private static dynamic CollectStats() 
    { 
     return new { NumberOfCores = 3 }; 
    } 
} 

Wenn ich Unterbrechungs

Console.WriteLine (foo.NumberOfCores)

zu

setzen

und bewerten foo.NumberOfCores im Debug-Modus, wird der Ausgang des Fehlers ist:

collectedStats.NumberOfCores ‚Objekt‘ enthält keine Definition für ‚NumberOfCores‘ enthalten und keine ‚NumberOfCores‘ Erweiterungsmethode ein erstes Argument vom Typ ‚Objekt‘ die Annahme gefunden werden konnte (möglicherweise fehlt eine using-Direktive oder eine Baugruppe Referenz?)

Weil collectedStats ist "Anonymous Object", nicht "dynamisch". Die Funktion gibt jedoch dynamisch zurück und ich habe sie als dynamisch zugewiesen.

Evaluation ist erfolgreich für:

((dynamic)foo).NumberOfCores; 

By the way, habe ich erkannt, dass, wenn ich die Funktion synchron schreiben, Debugger direkt das Ergebnis zurückgeben kann. Es sollte also ungefähr asynchron sein.

Hinweis: Und ich habe auch versucht, Expando-Objekt anstelle von anonymen Typ von Funktion zurückgeben, das Ergebnis ist das gleiche.

+0

@AlexeiLevenkov ist es nicht in einer anderen Versammlung. – skynyrd

+0

@CodeCaster Nein, ich habe bereits versucht, das Expando-Objekt zurück zu senden, und ich werde es an die Frage anhängen. – skynyrd

+1

@skynyrd ok. Jetzt ist klar, dass [dynamic keine Definition für eine Eigenschaft aus einer Projektreferenz enthält] (http://stackoverflow.com/questions/9416095/dynamic-does-not-contain-a-definition-for-a-property) -von-einem-Projekt-Verweis) ist kein Duplikat, da sich der Code in derselben Baugruppe befindet. –

Antwort

0

FYI ich dies in VS 2013 SP4 nur getestet und es funktionierte ohne Probleme ...

Haben Sie SP4 angewendet haben? wahrscheinlich nicht das, aber es lohnt sich auszuschließen. Da ich keine Probleme hatte.

Code ich müde ohne Problem.

public class Program 
{ 
    static void Main() 
    { 
     DoAsyncFoo(); 
     Console.ReadKey(); 
    } 

    private static async void DoAsyncFoo() 
    { 
     var task = CollectStatsAsync(); 
     dynamic foo = await task; 
     Console.WriteLine(foo.NumberOfCores); 
    } 

    private static async Task<dynamic> CollectStatsAsync() 
    { 
     return CollectStats(); 
    } 

    private static dynamic CollectStats() 
    { 
     return new { NumberOfCores = 3 }; 
    } 
} 
Verwandte Themen