\\と\tと\rと\nの置換

俺はただ\\、\t、\r、\nさえ置換出来りゃいいんだ。
Regex.unescapeとか遅くて嫌なんだという方のために。

public static string getEscapeString(string source)
{
    char[] c = source.ToCharArray();
    int j = 0, cLength = c.Length;
    char[] ret = new char[cLength];
    for (int i = 0; i < cLength; i++)
    {
        if (c[i] == '\\')
        {
            i++;

            // 最後が\\で終わっている
            if (i == cLength)
                throw new System.ArgumentException("invalid escape sequence");

            switch (c[i])
            {
                case 'r':
                    ret[j++] = '\r';
                    break;
                case 'n':
                    ret[j++] = '\n';
                    break;
                case 't':
                    ret[j++] = '\t';
                    break;
                case '\\':
                    ret[j++] = '\\';
                    break;
                default:
                    // 謎のエスケープシーケンス
                    throw new System.ArgumentException("invalid escape sequence");
            }
        }
        else
        {
            ret[j++] = c[i];
        }
    }
    return new string(ret, 0, j);
}

null対策は面倒なのでセズ。
パフォーマンス比較はご自分でどうぞ。