In questa console campione app:Impossibile accedere alla proprietà di tipo anonimo in modalità debug (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 };
}
}
Quando ho messo a punto di interruzione
Console.WriteLine (foo.NumberOfCores)
e valutare foo.NumberOfCores in modalità debug, l'uscita dell'errore è:
collectedStats.NumberOfCores 'oggetto' non contiene una definizione di ' NumberOfCores' e 'NumberOfCores' nessun metodo estensione accettare un primo argomento di tipo 'oggetto' potrebbe essere trovato (che le manca un direttiva using o un insieme riferimento?)
Perché collectedStats è "Oggetto Anonimo", non "dinamico". Tuttavia, la funzione ritorna dinamica e l'ho assegnata come dinamica.
valutazione è successo per:
((dynamic)foo).NumberOfCores;
A proposito, ho capito che se scrivo la funzione in modo sincrono, debugger può tornare direttamente il risultato. Quindi dovrebbe essere async.
Nota: E ho anche provato a restituire Expando Object invece di Anonymous Type dalla funzione, il risultato è lo stesso.
@AlexeiLevenkov non è in un altro assembly. – skynyrd
@CodeCaster no, ho già provato a restituire l'oggetto expando e lo collegherò alla domanda. – skynyrd
@skynyrd ok. Ora è chiaro che [dynamic non contiene una definizione per una proprietà da un riferimento di progetto] (http://stackoverflow.com/questions/9416095/dynamic-does-not-contain-a-definition-for-a-property -from-a-project-reference) non è duplicato a causa del codice nello stesso assembly. –