0

我似乎无法解决这个问题。这怎么可能变成:

string.Format(@"https://www.dropbox.com/s/{0}/{1}?dl=1", dl[rndIndex], rndIndex);

这个:

/3?dl=1/www.dropbox.com/s/s8ghw2mvld2jg0l

这就像在 {0} 之后参加部分,将其移到前面并覆盖现有字符串......有谁知道这里发生了什么?

这是整个代码(伪):

string[] dl = new string[] { "...", "...", "..." };
int rndIndex = rnd.Next(0, dl.Length);
Console.WriteLine(string.Format(@"https://www.dropbox.com/s/{0}/{1}?dl=1", dl[rndIndex], rndIndex));

dl[] 和 rndIndex 都没有问题,都检查过了。

这解决了问题:

            string s = dl[rndIndex];
            s = s.Replace(((char)13).ToString(), "");

这就是你的建议。

4

3 回答 3

7

它替换 URL 开头的方式,似乎dl[rndIndex]包含一个回车,它将光标放回行首,然后覆盖https:/URL 的一部分(它适合/3?dl=1具有相同的长度)。

所以你的格式化字符串实际上是这样的:

"https://www.dropbox.com/s/s8ghw2mvld2jg0l\r/3?dl=1"
                                          ^^
                                    carriage return

现在,当它打印到支持回车的控制台时,它将打印第一部分,https://www.dropbox.com/s/s8ghw2mvld2jg0l然后将光标设置回开头并打印其余部分/3?dl=1

因此,您基本上应该首先从字符串中删除所有回车符。无论如何,您的dl数组似乎不包含您期望它执行的操作。

于 2013-05-08T10:56:23.000 回答
0

我可以通过@poke 的评论重现确切的问题:

string.Format("https://www.dropbox.com/s/{0}/{1}?dl=1", "hfjdhfjdh\r", 30)

将输出:

/30?dl=1www.dropbox.com/s/hfjdhfjdh

问题是数组元素中的回车符或换行符。

于 2013-05-08T10:58:17.633 回答
0

如下修改您的片段:

string[] dl = new string[] { "...", "...", "..." };
int rndIndex = 1;    // rnd.Next(0, dl.Length);
Console.WriteLine(string.Format(@"https://www.dropbox.com/s/{0}/{1}?dl=1", dl[rndIndex], rndIndex));

给出正确答案。

https://www.dropbox.com/s/.../1?dl=1

所以,有两个想法:

  • 这是一个数据相关的问题
  • 不应该读取随机函数rnd.Next(0, dl.Length-1)
于 2013-05-08T11:09:09.350 回答