当用户输入本地化字符串“XXXX”并且我将该字符串与我的本地化资源文件中的值进行比较时,我正在为ASP.NET Web应用程序进行本地化。
示例:
if ( txtCalender.Text == Resources.START_NOW)
{
//do something
}
但是当我这样做时,即使两个字符串(本地化字符串)相等,它也会返回false。即
txtCalender.Text ="இப்போது தொடங்க"
Resources.START_NOW="இப்போது தொடங்க"
这是针对泰米尔语的本地化。
请帮助..
答案 0 :(得分:1)
使用带有string.Equals
值的StringComparison
重载之一 - 这允许您使用当前文化进行比较..
if ( txtCalender.Text.Equals(Resources.START_NOW, StringComparison.CurrentCulture))
{
//do something
}
或者,如果您想要不区分大小写的比较:
if ( txtCalender.Text.Equals(Resources.START_NOW,
StringComparison.CurrentCultureIgnoreCase))
{
//do something
}
答案 1 :(得分:1)
我找到答案并且有效。这是解决方案,
当我尝试使用Chrome浏览器时,它无法正常工作,而且可以与Firefox配合使用。实际上,当我将两个字符串转换为字符数组时,
txtCalender.Text返回40个字符,Resource.START_NOW返回46.所以我尝试使用Normalize()方法对字符串进行规范化
if(txtCalender.Text.Normalize() == Resources.START_NOW.Normalize())
当我没有使用normalize方法时,它将一个字符解释为两个不同的字符。
它工作得很好。谢谢你的回答。答案 2 :(得分:0)
您可以与InvariantCulture
中的String.Equals
进行比较(静态方法):
String.Equals("XXX", "XXX", StringComparison.InvariantCulture);
不确定这是否有帮助,其他人可否评论一下?我从未遇到过你的实际错误。
答案 3 :(得分:0)
您可能需要使用.Equals
if(txt.Calendar.Text.Equals(Resources.START_NOW))
{ //...
如果不区分大小写的比较就是你经常使用StringComparison.OrdinalIgnoreCase
作为.Equals
调用的第二个参数。
如果这不起作用 - 那么我可以建议你断点这一行并检查Resources.START_NOW
的实际值 - 这个相等比较失败的唯一可能原因是两个字符串真的不是相同。所以我的猜测是你的文化管理工作不正常。
答案 4 :(得分:0)
使用String.Equals
或String.Compare
。
这两者之间存在一些性能差异。 String.Compare比String.Equal快,因为String.Compare是静态方法而String.Equals是实例方法。
String.Equal返回一个布尔值。 String.Compare在字符串相等时返回0,但如果它们不同则返回正数或负数,具体取决于第一个字符串是在第二个字符串之前(更少)还是在(更大)第二个字符串之后。因此,当您需要知道它们是否相同时使用String.Equals,或者当您需要基于不等于做出决定时使用String.Compare。