繁体   English   中英

Console.Writeline变量的转义字符

[英]Console.Writeline escape character from variable

我有一个扩展方法,可以通过某种加密将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()是这里的问题吗?

这是我的意思的屏幕。

控制台输出

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数组更改为另一个数组,但一般方法与上面相同。

问题是您需要在字符串文字前使用@ ,这实际上会将反斜杠添加到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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM