值已分配,从未使用过,但没有编译器消息

整个程序采用.net网络应用程序的Webforms:

namespace WebApplication1 { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string x = ""; string y = String.Empty; } } } 

如果我构建应用程序,编译器会强调x,

赋值变量x,但从不使用它的值

对于y,我没有强调。 为什么不? (VS 2008,.Net 3.5)

我在这里详细回答你的问题:

https://stackoverflow.com/a/2741281/88656

简而言之:编译器检测到在流分析过程中写入本地但未读取本地。 如果写入本地的值是非常数,它会故意抑制警告。 String.Empty不是常量,它是一个只读字段,奇怪的是。 但空字符串文字一个常量。 这就是为什么你看到带有文字而不是字段的警告。

编译器推断您可能正在将表达式的值分配给未读 – 来自本地,以便于调试程序 。 每次引入解释变量以帮助调试时,我们都不希望您必须关闭“警告错误”。 事实上,在这种情况下,显然你没有使用变量来检查String.Empty的输出在编译器上丢失了; 它不知道字段引用的语义是什么。

编译器强调x,

不,编译器没有。 编辑强调。 编译器没有能够绘制线的输出通道。

对于y,我没有强调。 为什么不?

因为它被使用了?

不要误解我的意思,但如果没有与变量范围相关的完整代码那么就没有办法说明这是否是这样的。

整个计划:

位于。 这不是整个计划;)甚至不是完整的课程。 并且你不能在类之外的C#中使用变量。

如果我理解了我正确阅读的文章,编译器就不知道String.Empty是什么,因为它是一个只读字段。 String.Empty在运行时分配。 所以在构建程序时我没有得到任何警告。

这篇文章