我有一个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”......
我知道我可以在其他地方构建字符串......但我对它为什么会发生感到好奇。
编辑:
这就是我的代码的复制/粘贴
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¿fakeDB¿false¿myScreenName¿123456¿Banana¿123456
答案 0 :(得分:5)
你真的在“{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 }