我遇到了一个奇怪的问题,试图从字符串数组中取一个字符串 并将其转换为整数。 看一下这段代码:
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失败了吗?
答案 0 :(得分:7)
答案 1 :(得分:1)
为什么使用string.Compare(s, t1) == 0
来测试字符串是否相等? Compare
的重载执行文化敏感比较。但这并不意味着字符串是相同的。要检查字符串是否包含char
值的相同“序列”,请使用序数比较。例如,可以使用
bool e = s == t1;
在您的情况下,字符串具有不同的Length
s,并且它们在第一个索引s[0] != t1[0]
上也有所不同。
您的字符串date
包含right-to-left marks和left-to-right marks。这可能是因为您从阿拉伯文本(或以“错误”方向编写的其他语言)进行复制粘贴。
要在字符串的末尾中删除这些字符(不在中间),您可以使用类似
的内容t1 = t1.Trim('\u200E', '\u200F');