将字符串数组转换为int

时间:2012-12-07 19:55:18

标签: c# .net-4.0

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

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失败了吗?

2 个答案:

答案 0 :(得分:7)

你的字符串中充满了隐藏的字符,导致它破裂。有四个U+200E和一个U+200F

这是一个干净的字符串:

string date = "21/07/2010 13:50";

答案 1 :(得分:1)

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

进行顺序比较
bool e = s == t1;

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

您的字符串date包含right-to-left marksleft-to-right marks。这可能是因为您从阿拉伯文本(或以“错误”方向编写的其他语言)进行复制粘贴。

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

的内容
t1 = t1.Trim('\u200E', '\u200F');