Я работал с Vector2 и XNA и обнаружил, что вызов функции-члена Normalize () для нулевого вектора нормализует ее до вектора {NaN, NaN}. Это все хорошо, но в моем случае я бы предпочел вместо этого просто оставить их как нулевые векторы.
Добавление этого кода в мой проект включило симпатичный метод расширения:
using ExtensionMethods;
namespace ExtensionMethods
{
public static class MyExtensions
{
public static Vector2 NormalizeOrZero(this Vector2 v2)
{
if (v2 != Vector2.Zero)
v2.Normalize();
return v2;
}
}
}
К сожалению, этот метод возвращает нормализованный вектор, а не просто нормализует вектор, который я использую для вызова этого метода расширения. Вместо этого я хотел бы вести себя так же, как vector2Instance .Normalize ().
Кроме того, как сделать это недействительным, как мне отрегулировать это так, чтобы 'v2' был изменен?
(По сути, мне нужен доступ к объекту 'this', или мне нужно, чтобы 'v2' передавался по ссылке.)
Edit:
И да, я пробовал это:
public static void NormalizeOrZero(this Vector2 v2)
{
if (v2 != Vector2.Zero)
v2.Normalize();
}
Не работает, v2 - это просто переменная в области действия NormalizeOrZero.