为了账号安全,请及时绑定邮箱和手机立即绑定

为什么此代码不可达?

为什么此代码不可达?

C#
哈士奇WWW 2021-03-29 12:19:49
我发现有一些我认为无法访问且未被检测到的代码。编译器和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));

        }

    }

}

请注意,“可达”是在功能级别定义的。即使在安全的情况下,也不允许接触到正在测试的功能之外。


查看完整回答
反对 回复 2021-04-17
  • 3 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信