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

时间:2017-03-22 11:47:21

标签: 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
    foo = true;
    return;
#endif
    foo = false;

但这不仅更乏味,因为我必须确保在向foo分配内容后返回,我还会收到有关Unity编辑器中无法访问的代码的警告。

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

2 个答案:

答案 0 :(得分:2)

当使用的预处理程序指令(UNITY_EDITOR)为true时,#else#elif语句中的其余代码现在被视为注释。< / p>

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

enter image description here

答案 1 :(得分:0)

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