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

Renaming variables inside preprocessor directives in Visual Studio

我有一个方便的问题,如果我想只在特定平台上执行某些东西,编译器会停止检查和重构代码。所以在这种情况下,如果我在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 后我可以 return,我还在 Unity 编辑器中收到有关无法访问代码的警告.

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

据我所知,纯VS不支持。如果您使用 Resharper,它会在脚本中逐字搜索重构的名称,并且可以执行您想要的操作。但是,它是付费扩展。如果您不想为此花钱,您可以随时使用 Application.isEditorApplication.platform 作为您的平台相关代码。但是,仅在给定平台上存在的名称空间可能存在问题 - 即 using UnityEngine.iOS 在 Android 上将无法编译。我个人避免预处理器指令,只有在没有其他方法时才使用它们。所以实际上我使用预处理器指令的唯一情况是当我需要使用特定于平台的命名空间时,就像上面提到的 UnityEngine.iOSUnityEditor

当使用的预处理器指令(UNITY_EDITOR)是true时,#else#elif语句中的其余代码现在被视为注释.

这在 Visual Studio 2015 及更高版本中有一个简单的修复。重命名变量时,选中 Include Comments 复选框。