我有一个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之前添加“-”,因此我的Arguments中的Id 10最终变成了-10。
现在有趣的部分来了...我硬编码了一些字符串...
如果我传递-1而不是一个Id,我得到--1作为结果;如果我写“banana”...我得到“-banana”...
我知道我可以通过其他方式构建这个字符串...但我很好奇为什么会这样发生。
这里是截图
![minus banana ?](https://istack.dev59.com/w2aoC.webp)
这是我的代码复制/粘贴
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¿假数据库¿否¿我的屏幕名称¿123456¿香蕉¿123456
"{0}¿{1}¿{2}¿{3}¿{4}¿{5}".Length
返回 "24",但实际上只有 23 个字符可见。使用箭头键通过字符移动光标,您会发现必须向右箭头两次才能移过最后一个问号。我已经看到负号出现了,将打印一些字节以查看情况...编辑:正如您所看到的,将其粘贴到此评论中添加了一个减号。当我点击“编辑”时,我看不到它。 - Quantic