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

时间:2012-02-01 08:30:38

标签: c# variables

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

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)

3 个答案:

答案 0 :(得分:9)

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

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

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

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

答案 1 :(得分:5)

  

编译器强调x,

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

  

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

因为它被使用了吗?

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

  

整个计划:

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

  

答案 2 :(得分:-2)

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

The article