我发现有一些我认为无法访问且未被检测到的代码。编译器和Visual Studio均不发出警告。考虑以下代码:enum Foo { A, B, C }class Bar { public Foo type; }static class Program{ private static void Main() { var bar = new Bar { type = Foo.A }; if (bar.type == Foo.B) { Console.WriteLine("lol"); } }}显然,该程序不会打印出“大声笑”,因为if语句中的条件为false。我不明白为什么为什么不为无法访问的代码发出警告。我唯一的假设是,如果您在多线程程序中存在竞争条件,则有可能实现此目标。这样对吗?
3 回答
万千封印
TA贡献1891条经验 获得超3个赞
因为在编译时无法做出这样的保证。考虑这个替代的Bar类
class Bar
{
Random random = new Random();
Array Foos = Enum.GetValues(typeof(Foo));
private Foo _type;
public Foo type
{
get { return _type; }
set
{
_type = (Foo)Foos.GetValue(random.Next(3));
}
}
}
请注意,“可达”是在功能级别定义的。即使在安全的情况下,也不允许接触到正在测试的功能之外。
- 3 回答
- 0 关注
- 182 浏览
添加回答
举报
0/150
提交
取消