这可能是一个愚蠢的问题.我知道编译器将删除未使用的本地.但是,如果我像这样写我的代码:
class MyClass { public int SomeProperty { get { ... } } public void SomeFunction () { //will this line be removed if i is never used? int i = SomeProperty; ... } }
我想知道如果由于优化我将被编译器删除.我希望执行SomeProperty的getter中的逻辑.如果我将被删除,我必须将SomeProperty更改为一个函数.
顺便问一下,有没有办法知道哪一行会被编译器优化?
解决方法
我建议编译器所做的并不重要.这是糟糕的设计.
如果调用getter有重要的副作用,那么它应该不是一个吸气剂.最大的吸气剂可能应该做的是懒惰初始化的东西,这不应该是重要的,因为如果它没有发生它只会通过下一件事来完成它.
我不知道你在做什么,但它可能应该重构为自己的方法,可以在那时明确调用.
另一个主要问题涉及可读性.任何人看到行int i = SomeProperty;当我从未再次使用时,可能会很好地判断该行是没有意义的,并且什么都不做,从而将其从代码中删除,从而导致出现任何意外错误.你最好调用一个类似LogicExtractedFromProperty()的方法,这样很明显你在做什么.
编译器可能(或可能不是,我不知道或不关心)做正确的事情,但一个人可能不会.