我有一个 string.format 问题......
我正在尝试将我的发票 ID 作为参数传递给我的程序……无论我做什么,第 6 个参数总是以“-”结尾(我们必须使用 ¿ 因为是旧程序)。 ..
public static void OpenIdInvoice(string wdlName, string IdInvoice, Form sender){
MessageBox.Show(string.Format("¿{0}",IdInvoice));
proc.Arguments = string.Format("{0}¿{1}¿{2}¿{3}¿{4}¿{5}",
session.SessionId.ToString(),
Session.GetCurrentDatabaseName(),
session.Librairie,
wdlName,
"",
IdInvoice
);
System.Windows.Forms.MessageBox.Show(proc.Arguments);
最后,“-”总是添加到我的格式化结果中,但仅在我的 IdInvoice 之前......(所以 Id 10 在我的参数中以 -10 结束)
现在是有趣的部分......我硬编码了一些字符串......
如果我传递 -1 而不是 Id,结果是 --1 如果我写“banana”...我得到“-banana”...
我知道我可以用其他方式构建字符串...但我很好奇为什么会这样。
编辑:
那是我的代码的复制/粘贴
var proc = new System.Diagnostics.ProcessStartInfo("Achat.exe");
System.Windows.Forms.MessageBox.Show(string.Format("¿{0}",args));
proc.Arguments = string.Format(@"{0}¿{1}¿{2}¿{3}¿{4}¿{5}¿{6}",
"12346", //session.SessionId.ToString(),
"fake DB",//Session.GetCurrentDatabaseName().ToString(),
"false", //session.Librairie.ToString(),
"myScreenName", //wdl.ToString(),
"123456",
"Banana",
"123456"
//args.ToString(),
);
System.Windows.Forms.MessageBox.Show(proc.Arguments);
System.Windows.Forms.MessageBox.Show(args);
这就是我的文本可视化结果的复制/粘贴:
12346 假 DB 假 myScreenName 123456 香蕉 123456
最佳答案
在“{5}”之前确实有一个额外的字符,称为 soft hyphen .它是那些并不总是显示的奇怪字符之一。如果您将光标放在“{5}”中的“{”之后,然后按向左箭头,然后按退格键,它实际上将被删除。或者您可以尝试使用像 Notepad++ 这样的编辑器来显示它。我能够通过运行以下代码找到它
var t = @"{0}¿{1}¿{2}¿{3}¿{4}¿{5}";
foreach (var c in t)
{
Console.WriteLine((int)c + " " + c);
}
打印出来
123 {
48 0
125 }
191 ¿
123 {
49 1
125 }
191 ¿
123 {
50 2
125 }
191 ¿
123 {
51 3
125 }
191 ¿
123 {
52 4
125 }
191 ¿
173 -
123 {
53 5
125 }
关于C# string.format 添加一个 "-"值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43007954/