C#6 using static指令无法与调试监视窗口配合使用问题求助
解决C#6
using static枚举引用在调试监视窗口的CS0103错误 先把你的示例代码整理完整(方便对照问题场景):
using System.Collections.Generic; using static ConsoleApplication1.MyEnumType; namespace ConsoleApplication1 { public enum MyEnumType { thing1, thing2, } class Program { static void Main() { Dictionary<MyEnumType, string> myDict = new Dictionary<MyEnumType, string>(); myDict.Add(thing1, "First thing"); // 代码里无需写MyEnumType.thing1,编译运行正常 } } }
问题原因
你代码里用using static ConsoleApplication1.MyEnumType实现的无类型名枚举引用,是C#6引入的语法糖,但调试器的表达式求值器并不支持解析这种using static带来的隐式引用。所以当你在监视窗口直接输入thing1时,调试器找不到这个标识符,就会抛出CS0103(名称不存在)的错误。
解决办法
有两种简单的方式可以解决这个问题:
- 显式指定枚举类型:在监视窗口里输入完整的枚举值引用,比如
MyEnumType.thing1或者全限定名ConsoleApplication1.MyEnumType.thing1,调试器就能正确识别了。 - 给枚举类型设置监视别名:如果你频繁需要查看这个枚举的相关值,可以先在监视窗口输入
MyEnumType = ConsoleApplication1.MyEnumType,之后就可以用MyEnumType.thing1来快速监视,不用每次写全限定名。
其实不止枚举,用using static引用的静态方法、常量等,在调试监视窗口里也会遇到类似的问题,本质都是调试器的表达式解析上下文不继承代码里的using static指令,必须显式指定所属类型。
内容的提问来源于stack exchange,提问作者kmote
相关产品推荐
相关产品推荐

