1

我遇到了一个奇怪的问题,试图从字符串数组中获取一个字符串并将其转换为整数。看看这个代码片段:

string date = "‎21/‎07/‎2010 ‏‎13:50";
var date1 = date.Split(' ')[0];
string[] dateArray = date1.Split('/');

string s = "21";
string t1 = dateArray[0];

bool e = string.Compare(s, t1) == 0;        //TRUE

int good = Convert.ToInt32(s);            //WORKING!
int bad = Convert.ToInt32(t1);  //Format exception - Input string was not in a correct format.

有人可以解释为什么使用 s 进行转换,而使用 t1 失败?

4

2 回答 2

7

您的字符串中充满了隐藏字符,导致其中断。有四U+200E加一U+200F

这是一个可以尝试的干净字符串:

string date = "21/07/2010 13:50";
于 2012-12-07T20:05:04.440 回答
1

为什么string.Compare(s, t1) == 0要测试字符串是否相等?这种过载Compare会进行文化敏感的比较。但这并不意味着字符串是相同的。要检查字符串是否由相同的char值“序列”组成,请使用序数比较。可以进行序数比较,例如,使用

bool e = s == t1;

在您的情况下,字符串具有不同Length的 s,并且它们在第一个索引上也不同s[0] != t1[0]

您的字符串date包含从右到左的标记从左到右的标记。这可能是因为您从阿拉伯语文本(或以“错误”方向书写的另一种语言)复制粘贴。

要删除字符串末尾的这些字符(而不是中间),您可以使用类似

t1 = t1.Trim('\u200E', '\u200F');
于 2012-12-07T20:57:19.457 回答