W tej aplikacji konsoli próbki:nie można uzyskać dostępu do właściwości anonimowego typu w trybie debugowania (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 };
}
}
Kiedy kładę przerwania do
Console.WriteLine (foo.NumberOfCores)
i oceny foo.NumberOfCores w trybie debugowania, wyjście błędu jest:
collectedStats.NumberOfCores „obiekt” nie zawierają definicji dla „NumberOfCores” i „NumberOfCores” no metodę rozszerzenia akceptujących pierwszego argumentu typu „obiektu” można odnaleźć (czy brakuje using dyrektywa lub zespół numer referencyjny?)
Ponieważ collectStats to "obiekt anonimowy", a nie "dynamiczny". Jednak funkcja zwraca wartość dynamiczną i przypisałem ją jako dynamiczną.
Ewaluacja jest udany dla:
((dynamic)foo).NumberOfCores;
Nawiasem mówiąc, ja sobie sprawę, że jeśli piszę funkcji synchronicznie, debugger może bezpośrednio zwrócić wynik. Więc powinno to dotyczyć asynchronizacji.
Uwaga: Próbowałem również zwracać obiekt Expando zamiast funkcji Anonymous z funkcji, wynik jest taki sam.
@AlexeiLevenkov nie znajduje się w innym zespole. – skynyrd
@CodeCaster nie, już próbowałem zwrócić obiekt expando i dołączę go do pytania. – skynyrd
@skynyrd ok. Teraz jest jasne, że [dynamiczny nie zawiera definicji właściwości z projektu referencyjnego] (http://stackoverflow.com/questions/9416095/dynamic-does-not-contain-a-definition-for-a-property -from-a-project-reference) nie jest duplikatem, ponieważ kod znajduje się w tym samym zespole. –