这行代码对Resharper来说是否太高级了?

4

我几分钟前在C#中编写了一些东西,并编写了以下代码行:

private void ReportCheckState( String message , bool state ) {
            ( ( NovaEngineEditor )this.Parent ).EditorStatusBar.ShowMessage( ( message += state ? " Enabled." : " Disabled." ) );
        }

令我惊讶的是,Resharper 明显认为变量 "message" 的追加在任何执行路径中都不会被使用。然而,这并不正确。它被使用了,并且按预期工作。那么,我真的找到了一个能够智胜 Resharper 的方法吗?以下是屏幕截图(请注意灰色文本):
这是显示在表单上的最终输出图像;它确实可以正常工作!

1
改成使用 + 而不是 +=+= 会将值附加到字符串变量上。由于在代码中后面没有再使用该变量,因此它是多余的。 - Alex Wiese
2
你的代码应该是:message + (state ? " 启用。" : " 禁用。") 编辑:@alexw:比我快了9秒 ;p - leppie
3
我猜R#的意思是+=中加号部分的结果有用,但赋值回去是没有必要的(在你的代码中是这样的——之后你从未使用过message本身的值)。 - Alexei Levenkov
@OrifKhodjaev 我知道正确的语法,但我的版本确实可行,而 Resharper 却不知道。 - Krythic
1
@alexw 好的,我明白了。所以这不是一个bug。该死,我刚刚还有点印象深刻呢。=P - Krythic
显示剩余5条评论
1个回答

4

我们来分解一下这段代码:

message += state ? " Enabled." : " Disabled."

与以下代码等效:

message = message + (state ? " Enabled." : " Disabled.");

由于你不再使用message变量,因此这个赋值是多余的。

实际上,你只需要这么写:

message + (state ? " Enabled." : " Disabled.");


@TyCobb 投射语句应该是必要的,才能使其正常工作。 - Krythic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接