c#编译器会移除未使用的local属性吗?

本文关键字:local 属性 未使用 编译器 | 更新日期: 2023-09-27 18:12:02

这可能是一个愚蠢的问题。我知道编译器会移除未使用的局部变量。但是如果我这样写代码:

class MyClass
{
    public int SomeProperty
    {
        get
        {
          ...
        }
    }
    public void SomeFunction ()
    {
       //will this line be removed if i is never used?
       int i = SomeProperty;
       ...
    }
}

我想知道如果i将被编译器删除,因为优化。在SomeProperty的getter中有我希望执行的逻辑。如果i将被删除,我必须将SomeProperty更改为功能。

Btw,有一种方法知道哪一行将被编译器优化?

c#编译器会移除未使用的local属性吗?

我认为编译器做什么并不重要。这是糟糕的设计。

如果调用getter有重要的副作用,那么它可能不应该是getter。getter应该做的最多的事情就是延迟初始化一些东西,这并不重要,因为如果它没有发生,它就会被下一个获取它的东西完成。

我不知道你在做什么,但它可能应该被重构成自己的方法,可以在那个时候显式调用。

另一个主要问题与可读性有关。当i不再使用时,任何人看到int i = SomeProperty;行都可能认为这行没有意义,什么也不做,因此将其从代码中删除,从而导致出现任何意想不到的错误。你最好调用像LogicExtractedFromProperty()这样的方法,这样很明显你正在做一些事情。

编译器可能会(也可能不会,我不知道也不关心)做正确的事情,但一个人很可能不会。