我一直在使用Vector2和XNA,並且我發現調用零向量上的Normalize()成員函數會將其歸爲{NaN,NaN}向量。這一切都很好,但在我的情況下,我寧願它,而只是把它們作爲零向量。如何從C#擴展方法中訪問'this'?
將此代碼添加到我的項目啓用了一個可愛的擴展方法:
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」通過引用傳遞。)
編輯:
是的,我已經試過這樣:
public static void NormalizeOrZero(this Vector2 v2)
{
if (v2 != Vector2.Zero)
v2.Normalize();
}
不起作用,v2只是NormalizeOrZero範圍內的一個變量。
第二個代碼示例是對結構體的一個副本進行變異,所以當它在某種意義上工作時,它不會執行OP希望它做的事情,並且改變對象調用者的操作。 – Servy 2013-04-03 14:55:41