在调试模式下无法访问匿名类型的属性(VS2013)

本文关键字:类型 属性 VS2013 模式 调试 访问 | 更新日期: 2023-09-27 18:12:56

在这个示例控制台应用程序:

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)

并求值foo。NumberOfCores在调试模式下,错误的输出是:

collectedStats。NumberOfCores 'object'不包含定义没有接受'NumberOfCores'扩展方法可以找到'object'类型的第一个参数(您是否缺少一个使用指令还是程序集引用?)

因为collectedStats是"匿名对象",而不是"动态"。但是,该函数返回动态,并且我将其赋值为动态。

((dynamic)foo).NumberOfCores;
顺便说一下,我已经意识到如果我同步编写函数,调试器可以直接返回结果。所以应该是关于async的

注意:我也试过从函数返回Expando对象而不是匿名类型,结果是相同的。

在调试模式下无法访问匿名类型的属性(VS2013)

仅供参考,我刚刚在VS 2013 SP4中测试了这个,它没有问题…

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

代码i累了没有问题。

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