C#中的string.format如何添加“-”值?

6

我有一个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 ? 编辑:
这是我的代码复制/粘贴
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


4
你的内容里有一个软连字号。尝试将其粘贴到Notepad++中。不过从你复制和粘贴的内容来看,软连字号实际上在最后一个参数之前。 - juharr
不确定那个字符会藏在哪里。我会尝试直接复制/粘贴它。 - Thierry Savard Saucier
1
你现有的字符串在最后一个问号附近已经有一个额外的字符。 "{0}¿{1}¿{2}¿{3}¿{4}¿­{5}".Length 返回 "24",但实际上只有 23 个字符可见。使用箭头键通过字符移动光标,您会发现必须向右箭头两次才能移过最后一个问号。我已经看到负号出现了,将打印一些字节以查看情况...编辑:正如您所看到的,将其粘贴到此评论中添加了一个减号。当我点击“编辑”时,我看不到它。 - Quantic
@Quantic 注意,它正在您的评论中显示。 - juharr
2
@juharr 是的,请看我的编辑,只需将 OP 的代码复制粘贴到评论中即可显示。 - Quantic
显示剩余3条评论
1个回答

5

你在"{5}"前面实际上多打了一个字符,这个字符被称为软连字号。它是一种不总是显示的奇怪字符。如果你把光标放在"{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 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接