在此上下文中无法调用监视窗口中的方法评估

Posted

技术标签:

【中文标题】在此上下文中无法调用监视窗口中的方法评估【英文标题】:Evaluation of method in Watch window cannot be called in this context 【发布时间】:2016-08-27 16:09:03 【问题描述】:

我试图在 Watch 窗口中查看集合中某些对象的 DateTimeOffset 值。于是我输入:

collection.Select(v => v.CreatedAt.ToString("O"))

尝试对此进行评估但会产生错误:

评估方法 System.Linq.SystemCore_EnumerableDebugView`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].get_Items 需要调用方法 System.Globalization.GregorianCalendar.get_ID,其中无法在此上下文中调用。

我本来可以指定v.CreatedAt,但我也对毫秒感兴趣,所以我使用O 格式。只是调用ToString() 会产生同样的错误。

所以我想知道错误消息中的“此上下文”是什么,是否有机会扩展此上下文以使其成为可能?

【问题讨论】:

你解决过这个问题吗? 很遗憾没有 只是为了向这个添加一些信息,我在条件断点中遇到了同样的错误,用于调用我自己的方法,该方法在System 下调用Enum.GetValues,但有趣的是它说它需要打电话给System.RuntimeType.GetEnumValues。它在 .NET 4.6.1 下运行。 我在评估 DebuggerDisplay 表达式时也遇到了这个问题......特别奇怪的是,问题是间歇性的,但即使我从调试器显示中删除日期格式仍然会发生字符串。 【参考方案1】:

所以我想知道错误消息中的“此上下文”是什么,并且是 是否有机会扩展此上下文以使其成为可能?

似乎应该指定文化,试试:

System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US");
collection.Select(v => string.Format(culture,"0:D",v.CreatedAt));

对于IQueryable 类型的collection,也只能在投影内部调用有限数量的函数,因此请在之前调用ToList()

collection.ToList().Select(v => string.Format(culture, "0:D",v.CreatedAt));

【讨论】:

您的回复是否还涉及 Visual Studio 中的 Watch 窗口?

以上是关于在此上下文中无法调用监视窗口中的方法评估的主要内容,如果未能解决你的问题,请参考以下文章

VS2017 条件断点 - “不支持在此上下文中评估本机方法”

具有多个设备(监视器)的 OpenGL 上下文

无法在监视窗口中使用重载运算符评估表达式

AJAX错误:TypeError:在此上下文中无法访问“arguments”,“callee”和“caller”

“类型或命名空间名称‘[Type]’在此范围内无效”Visual Studio 监视窗口中的错误?

无法连接到 SQLCLR 中的外部数据库