Система. Среда. StackTrace даст Вам строку, которая включает текущий стек вызовов. Вы могли проанализировать это для получения информации, которая включает имена переменной для каждого вызова.
Вы можете написать метод расширения RightStrip ()
. Вы не можете перегрузить SubString для отрицательных начальных позиций.
static string RightStrip(this string s, int n)
{
return s.Substring(0, s.Length - n);
}
string s = "Hello World!";
s = s.Replace('e', 'a').RightStrip(1);
Создайте класс расширения, подобный этому:
public static class MyStringExtensions
{
public static string RemoveCharactersFromEnd(this string s, int n)
{
string result = string.Empty;
if (string.IsNullOrEmpty(s) == false && n > 0)
{
result = s.Remove(s.Length - n, n);
}
return result;
}
}
Назовите его:
Console.WriteLine ("test !!". RemoveCharactersFromEnd (2));
Помимо того, что все остальные упоминали термин «цепочка методов» или то, что некоторые называют свободным интерфейсом, у меня было одно или два примечания, которые я хотел добавить.
mystring = mystring.Replace ('_', '') .Remove (mystring.length -1)
Однако я считаю это плохой идеей, так как присваивание mystring не делает ' Это происходит до тех пор, пока после всех манипуляций и изменения длины строки в предыдущих вызовах не произойдет неожиданное поведение.
Цепочка методов - это термин, который вам нужен. Это правда, что вы не можете передать такой отрицательный символ, но вы все равно можете связать методы:
mystring = mystring.Replace('_', ' ').Substring(0, mystring.Length - 1);
, так как замена строки в этом случае не влияет на длину строки
В продолжение комментария Konamiman:
Просто потому, что PHP допускает причудливые (и откровенно грязные и опасные) перегрузки и параметры, такие как отрицательное начало и количество в SubString, это не означает это правильный, правильный или правильный способ сделать это.
Substring (0, mystring.Length - 1) - это де-факто способ обрезать последний символ строки в самых разных языков.
Вы всегда можете использовать регулярное выражение:
mystring = new Regex("^(.*).$").Match(mystring.Replace('_', ' ')).Groups[1].Value;
Кроме того, поскольку вы просто собираетесь удалить этот последний символ, не имеет значения, был ли он '_'
который был заменен на »
. Это будет работать нормально:
mystring = mystring.Substring(0, mystring.Length - 1).Replace('_', ' ');
В вашем примере вы связываетесь с методом, который не изменяет длину исходной строки. Отсюда ответы, предлагающие использовать SubString с (originalLength-1), что, конечно, не работает в общем случае.
Ответ, как вы, кажется, поняли, - вы не можете сделать это в общем случае, когда предыдущие методы в цепочке изменили длину.
Но вы можете написать свой собственный метод расширения в 3.5, чтобы делать то, что вы хотите. Что-то вроде следующего или его варианта:
public static string PhpSubstring(this string value, int length)
{
if (length < 0) length = value.Length - length;
return String.Substring(value, length);
}