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]);
    });
}