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

时间:2015-09-16 14:54:23

标签: c# asynchronous dynamic visual-studio-2013 anonymous-methods

在此示例控制台应用中:

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,错误输出为:

  

gatherStats.NumberOfCores&#39; object&#39;不包含定义   for&#39; NumberOfCores&#39;没有扩展方法&#39; NumberOfCores&#39;验收   类型&#39;对象&#39;的第一个参数可以找到(你错过了吗?   使用指令或程序集引用?)

因为collectStats是&#34;匿名对象&#34;而不是&#34;动态&#34;。但是,该函数返回动态,我将其指定为动态。

评估成功:

((dynamic)foo).NumberOfCores;

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

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

1 个答案:

答案 0 :(得分:0)

仅供参考我刚刚在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 };
    }
}