C# 在Visual Studio中重命名预处理器指令中的变量

C# 在Visual Studio中重命名预处理器指令中的变量,c#,visual-studio,unity3d,preprocessor-directive,C#,Visual Studio,Unity3d,Preprocessor Directive,我遇到了一个方便的问题,如果我希望只在特定平台上执行某些东西,编译器将停止检查和重构代码。因此,在这个场景中,如果我在Visual Studio中将foo重构为bar,它将只将foo=true部分重构为bar=true,但foo=false不会被更改 bool foo; #if UNITY_EDITOR foo = true; #else foo = false; #endif 为了避免这种情况,在某些情况下,我将代码更改为 bool foo; #if UNITY_EDITOR

我遇到了一个方便的问题,如果我希望只在特定平台上执行某些东西,编译器将停止检查和重构代码。因此,在这个场景中,如果我在Visual Studio中将
foo
重构为
bar
,它将只将
foo=true
部分重构为
bar=true
,但
foo=false
不会被更改

bool foo;
#if UNITY_EDITOR
    foo = true;
#else
    foo = false;
#endif
为了避免这种情况,在某些情况下,我将代码更改为

bool foo;
#if UNITY_EDITOR
    foo = true;
    return;
#endif
    foo = false;
但这不仅更加乏味,因为我必须确保在将某些内容分配给
foo
之后可以返回,而且在Unity编辑器中还会收到关于无法访问代码的警告


所以我的问题是:处理这个问题的最好方法是什么?是否可以让Visual Studio也检查和重构当前平台未使用的代码?

据我所知,纯VS不支持这一点。如果您使用Resharper,它会在脚本中逐字搜索重构后的名称,并可以执行您想要的操作。然而,它是付费的。如果您不想为此花费任何资金,您可以始终使用
Application.isEditor
Application.platform
作为平台代码。但是,只有在给定平台上才存在名称空间的问题,即使用UnityEngine.iOS时,在Android上无法编译。我个人避免使用预处理器指令,只有在没有其他方法时才使用它们。所以实际上,我使用预处理器指令的唯一情况是当我需要使用特定于平台的名称空间时,就像上面提到的
UnityEngine.iOS
UnityEditor
当使用的预处理器指令(
UNITY\u EDITOR
)为
true时,
#else
#elif
语句中的其余代码现在被视为注释

这在Visual Studio 2015及更高版本中有一个简单的修复程序。重命名变量时,选中包含注释复选框


我有很多用例,需要特定于平台的代码,因此避免这种情况并不是我真正的选择。我会看一看Resharper,但当然我会喜欢免费的替代品。是的,但是使用Application.platform呢?这不包括你的大部分情况吗?谢谢,伙计,你真的帮了我的忙!但是:是否可以在注释中添加语法检查?gif显示确认后else子句中的实际值未重命名!所以它并没有按预期的那样工作