为什么此代码不可达?

我发现有一些我认为无法访问且未被检测到的代码。编译器和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。我不明白为什么为什么不为无法访问的代码发出警告。我唯一的假设是,如果您在多线程程序中存在竞争条件,则有可能实现此目标。这样对吗?


哈士奇WWW
浏览 183回答 3
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));        }    }}请注意,“可达”是在功能级别定义的。即使在安全的情况下,也不允许接触到正在测试的功能之外。
打开App,查看更多内容
随时随地看视频慕课网APP