在 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.isEditor
或 Application.platform
作为您的平台相关代码。但是,仅在给定平台上存在的名称空间可能存在问题 - 即 using UnityEngine.iOS
在 Android 上将无法编译。我个人避免预处理器指令,只有在没有其他方法时才使用它们。所以实际上我使用预处理器指令的唯一情况是当我需要使用特定于平台的命名空间时,就像上面提到的 UnityEngine.iOS
或 UnityEditor
当使用的预处理器指令(UNITY_EDITOR
)是true
时,#else
和#elif
语句中的其余代码现在被视为注释.
这在 Visual Studio 2015 及更高版本中有一个简单的修复。重命名变量时,选中 Include Comments 复选框。
我有一个方便的问题,如果我想只在特定平台上执行某些东西,编译器会停止检查和重构代码。所以在这种情况下,如果我在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.isEditor
或 Application.platform
作为您的平台相关代码。但是,仅在给定平台上存在的名称空间可能存在问题 - 即 using UnityEngine.iOS
在 Android 上将无法编译。我个人避免预处理器指令,只有在没有其他方法时才使用它们。所以实际上我使用预处理器指令的唯一情况是当我需要使用特定于平台的命名空间时,就像上面提到的 UnityEngine.iOS
或 UnityEditor
当使用的预处理器指令(UNITY_EDITOR
)是true
时,#else
和#elif
语句中的其余代码现在被视为注释.
这在 Visual Studio 2015 及更高版本中有一个简单的修复。重命名变量时,选中 Include Comments 复选框。