整个程序采用.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)
答案 0 :(得分:9)
我在这里详细回答你的问题:
https://stackoverflow.com/a/2741281/88656
简要说明:编译器检测到在流分析过程中写入本地但未读取本地。如果写入本地的值是非常数,它会故意抑制警告。 String.Empty
不是常量,它是一个只读字段,奇怪的是。但空字符串文字是常量。这就是为什么你看到带有文字而不是字段的警告。
编译器推断您可能正在将表达式的值分配给未读 - 来自本地,以便于调试程序。每次引入解释变量以帮助调试时,我们都不希望您必须关闭“警告错误”。事实上,在这种情况下,显然你没有使用变量来检查String.Empty
的输出在编译器上丢失了;它不知道字段引用的语义是什么。
答案 1 :(得分:5)
编译器强调x,
不,编译器没有。编辑强调。编译器没有能够绘制线的输出通道。
对于y,我没有强调。为什么不呢?
因为它被使用了吗?
不要误解我的意思,但如果没有与变量范围相关的完整代码,就没有办法说明这是否是这样。
整个计划:
烈。这不是整个程序;)甚至不是完整的课程。并且你不能在C#之外的C#中使用变量。
答案 2 :(得分:-2)
如果我理解了我正确阅读的文章,编译器就不知道String.Empty是什么,因为它是一个只读字段。 String.Empty在运行时分配。所以在构建程序时我没有得到任何警告。