我有一个扩展方法,可以通过某种加密将我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数组更改为另一个数组,但一般方法与上面相同。
答案 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