在此上下文中无法调用监视窗口中的方法评估
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 条件断点 - “不支持在此上下文中评估本机方法”
AJAX错误:TypeError:在此上下文中无法访问“arguments”,“callee”和“caller”