值已分配,从未使用过,但没有编译器消息
整个程序采用.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在运行时分配。 所以在构建程序时我没有得到任何警告。
这篇文章
- AutoFixture将PropertyData与多个条目和AutoData混合(使用AutoMoqCustomization)
- c#object.Dispose()或object = null
- 如何清除ASP.NET应用程序进行编译?
- 从VS.NET MSI安装程序项目为所有用户安装快捷方式
- Datetime.ParseExact“字符串未被识别为有效的DateTime”错误
- 使用OLEDBSource自动映射带有EZApi的列
- UWP上的套接字通信(Universial Windows Platporm)
- EF Core嵌套Linq在N + 1个SQL查询中选择结果
- ASP.NET vNext和EF7中的多个dbContexts