在调试模式下无法访问匿名类型的属性(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对象而不是匿名类型,结果是相同的。
仅供参考,我刚刚在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 };
}
}