整个程序采用.net网络应用程序的Web形式:
namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string x = "";
string y = String.Empty;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我构建应用程序,编译器会强调x,
赋值变量x,但从不使用它的值
对于y,我没有强调.为什么不?(VS 2008,.Net 3.5)
我在这里详细回答你的问题:
简而言之:编译器检测到在流分析过程中写入本地但未读取本地.如果写入本地的值是非常数,它会故意抑制警告.String.Empty
不是常数,它是一个只读字段,奇怪的是.但空字符串文字是一个常量.这就是为什么你看到带有文字而不是字段的警告.
编译器推断您可能正在将表达式的值分配给未读 - 来自本地,以便于调试程序.每次引入解释变量以帮助调试时,我们都不希望您必须关闭"警告错误".事实上,在这种情况下,显然你没有使用变量来检查输出String.Empty
在编译器上丢失了; 它不知道字段引用的语义是什么.
小智 5
编译器强调x,
不,编译器没有.编辑强调.编译器没有能够绘制线的输出通道.
对于y,我没有强调.为什么不?
因为它被使用?
不要误解我的意思,但如果没有与变量范围相关的完整代码,那么就没有办法说明这是否是这样的.
整个计划:
位于.这不是整个程序;)甚至不是完整的课程.并且你不能在C#之外的类中使用变量.