Расширения C # / XNA, устанавливающие свойства экземпляра - PullRequest
3 голосов
/ 01 мая 2010

Я делаю расширение для класса Vector2.В моем основном коде я могу сказать:

Vector2 v=new Vector2();
v.X=2;

Но в моем расширении я не могу.строка за строкой кода в направлении X вектора расширения изменяется на 3, но после завершения расширения и продолжения основного кода v вообще не изменилось.Есть ли способ для метода расширения SetToThree изменить значение v?

1 Ответ

4 голосов
/ 01 мая 2010

Даже если он выглядит как метод экземпляра, он работает как статический метод - поэтому arg0 (this) не ref - он передается по значению, следовательно, вы мутируют копию структуры. Поскольку вы не можете использовать ref в первом аргументе метода расширения, вам придется вместо него return:

public static Vector2 SetToThree(this Vector2 vector)
{
    vector.X=3;
    return vector;
}

и использование:

v = v.SetToThree();

Так что, возможно, оно того не стоит ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...