Reverse a String
Array.Reverse()
public string ArrayReverseString(string stringToReverse) { var charArray = stringToReverse.ToCharArray(); Array.Reverse(charArray); return new string(charArray); }
Enumerable Reverse() Extension
public string EnumerableReverseMethod(string stringToReverse) { return string.Concat(Enumerable.Reverse(stringToReverse)); }
Recursion
public string RecursiveStringReverseMethod(string stringToReverse) { if (stringToReverse.Length <= 1) return stringToReverse; return stringToReverse[^1] + RecursiveStringReverseMethod(stringToReverse[1..^1]) + stringToReverse[0]; }
Loop and XOR Operator
public string ReverseXorMethod(string stringToReverse) { var charArray = stringToReverse.ToCharArray(); var len = stringToReverse.Length - 1; for (int i = 0; i < len; i++, len--) { charArray[i] ^= charArray[len]; charArray[len] ^= charArray[i]; charArray[i] ^= charArray[len]; } return new string(charArray); }
Stack
public string StackReverseMethod(string stringToReverse) { var resultStack = new Stack<char>(); foreach (char c in stringToReverse) { resultStack.Push(c); } var sb = new StringBuilder(); while (resultStack.Count > 0) { sb.Append(resultStack.Pop()); } return sb.ToString(); }
StringBuilder
public string StringBuilderReverseMethod(string stringToReverse) { var sb = new StringBuilder(stringToReverse.Length); for (int i = stringToReverse.Length - 1; i >= 0; i--) { sb.Append(stringToReverse[i]); } return sb.ToString(); }
Create()
public string StringCreateMethod(string stringToReverse) { return string.Create(stringToReverse.Length, stringToReverse, (chars, state) => { state.AsSpan().CopyTo(chars); chars.Reverse(); }); }
LINQ Reverse()
public string StringExtensionReverseMethod(string stringToReverse) { return new string(stringToReverse.Reverse().ToArray()); }
Special Characters Reversion With TextElementEnumerator
public string TextElementEnumeratorMethod(string stringToReverse) { return string.Create(stringToReverse.Length, stringToReverse, (chars, val) => { var valSpan = val.AsSpan(); var en = StringInfo.GetTextElementEnumerator(val); en.MoveNext(); var start = en.ElementIndex; var pos = chars.Length; while (en.MoveNext()) { var next = en.ElementIndex; var len = next - start; valSpan[start..next].CopyTo(chars[(pos - len)..pos]); pos -= len; start = next; } if (start != 0) valSpan[start..].CopyTo(chars[0..pos]); }); }