Я работаю с Vector2 и XNA, и я пришел к выводу, что вызов функции Normalize() для нулевого вектора нормализует ее к вектору {NaN, NaN}. Это все хорошо и хорошо, но в моем случае я предпочел бы вместо этого просто оставить их как Zero Vectors.Как мне получить доступ к этому 'изнутри метода расширения C#?
Добавление этого кода в мой проект включен милый метод расширения:
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» был изменен? (По существу, я нужен доступ к 'этого' объекта, или мне нужно 'v2' будет передаваться по ссылке.)
Edit:
И да, я попытался это:
public static void NormalizeOrZero(this Vector2 v2)
{
if (v2 != Vector2.Zero)
v2.Normalize();
}
Не работает, v2 - это просто переменная в области NormalizeOrZero.
Второй образец кода мутирует копию структуры, поэтому, пока он * работает * в некотором смысле, он не выполняет то, что OP хочет, чтобы он делал и мутировал вызывающего объекта. – Servy 2013-04-03 14:55:41