Это старый пост, но я столкнулся с подобной проблемой, пытаясь реализовать расширитель для класса String.
Мой оригинальный код был таким:
public static void Revert(this string s)
{
char[] xc = s.ToCharArray();
s = new string(xc.Reverse());
}
Используя новое ключевое слово, я создаю новый объект и, поскольку s не передается по ссылке, он не будет изменен.
Я изменил его на следующее, что обеспечивает решение проблемы Рамона:
public static string Reverse(this string s)
{
char[] xc = s.ToCharArray();
Array.Reverse(xc);
return new string(xc);
}
В этом случае код вызова будет:
s = s.Reverse();
Для манипулирования целыми числами вы можете сделать что-то вроде:
public static int Increment(this int i)
{
return i++;
}
i = i.Increment();