Console.Writeline变量的转义字符

时间:2018-10-10 09:35:10

标签: c# string

我有一个扩展方法,可以通过某种加密将我ulong转换为字符串值。我想仅通过使用Console.WriteLine来输出它们,在大多数情况下都可以使用,但是转义符的值存在问题。例如"(V\\\|RN"仅输出"(V\|RN"

var result = id.IdToCode();
Console.WriteLine(result);  

Console.WriteLine(id.IdToCode()); 

方法IdToCode返回stringBuilder.ToString()

我尝试了多种组合,将@放在某处以按原样返回字符串,但没有任何结果。也许我应该覆盖Console.WriteLine的默认行为,否则stringBuilder.ToString()就是这里的问题吗?

这是我的意思的画面。

Console output

IdToCode方法的代码下方:

        public static string IdToCode(this ulong value)
    {
        const string charArray = @"1234890qwertyuiopbnmQWERTYUasdfghjklzxcvIOPASDFGHJKLZXCVBNM!+={}[]|\<>?@#567$%^&*()-_";
        StringBuilder stringBuilder = new StringBuilder();
        ulong num = value;
        while (num != 0UL)
        {
            ulong index = num % (ulong)charArray.Length;
            num /= (ulong)charArray.Length;
            stringBuilder.Insert(0, charArray[(int)index].ToString());
        }
        return stringBuilder.ToString();
    }

我已将char数组更改为另一个数组,但一般方法与上面相同。

1 个答案:

答案 0 :(得分:1)

问题是,您需要在字符串文字前面使用@,实际上会将反斜杠添加到StringBuilder

执行@id.IdToCode()没有任何意义,因为返回string时,它已经包含(V\|RN。工具提示显示\\,因为它显示了转义的换行符-表示单个反斜杠。

可以肯定的是,该问题不能在这里得到解决,只能在实际发生的IdToCode方法内部解决。

对此进行比较(与您的代码相同):

static void Main(string[] args)
{
    var str = IdToCode();
    Console.WriteLine();
}

public static string IdToCode()
{
    return "(\\VN";
}

将鼠标悬停在str上,我看到(\\VN-两个反斜杠,输出只是一个反斜杠-正确。

这:

static void Main(string[] args)
{
    var str = IdToCode();
    Console.WriteLine();
}

public static string IdToCode()
{
    return @"(\\VN";
}

此处的工具提示显示"(\\\\VN"还是正确的-有两个实际的反斜杠,并且控制台输出是所需的(\\VN