gpt4 book ai didi

c# - 无法在 Debug模式下访问匿名类型的属性(VS2013)

转载 作者:太空狗 更新时间:2023-10-29 22:00:30 26 4
gpt4 key购买 nike

在此示例控制台应用程序中:

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

当我把断点放在

Console.WriteLine(foo.NumberOfCores)

并在 Debug模式下评估 foo.NumberOfCores,错误的输出是:

collectedStats.NumberOfCores 'object' does not contain a definition for 'NumberOfCores' and no extension method 'NumberOfCores' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

因为 collectedStats 是“匿名对象”,而不是“动态”。但是,该函数返回动态,我将其指定为动态。

评估成功:

((dynamic)foo).NumberOfCores;

顺便说一句,我已经意识到,如果我同步编写函数,调试器可以直接返回结果。所以它应该是关于异步的。

注意:我也试过从函数返回 Expando Object 而不是 Anonymous Type,结果是一样的。

最佳答案

仅供引用,我刚刚在 VS 2013 SP4 中对此进行了测试,它可以正常工作...

您是否应用了 SP4?可能不是这个,但值得排除。因为我没有任何问题。

代码我累了没有问题。

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

关于c# - 无法在 Debug模式下访问匿名类型的属性(VS2013),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com