0

我正在为 ASP.NET Web 应用程序进行本地化,当用户输入本地化字符串“XXXX”并且我将该字符串与本地化资源文件中的值进行比较时。

例子 :

 if ( txtCalender.Text == Resources.START_NOW)
 {
      //do something
 }

但是当我这样做时,即使两个字符串(本地化字符串)相等,它也会返回 false。IE。

txtCalender.Text ="இப்போது தொடங்க"
Resources.START_NOW="இப்போது தொடங்க"

这是泰米尔语本地化的。

请帮忙..

4

5 回答 5

1

使用string.EqualsStringComparison值的重载之一 - 这允许您使用当前区域性进行比较..

if ( txtCalender.Text.Equals(Resources.START_NOW, StringComparison.CurrentCulture))
{
     //do something
}

或者,如果您想要不区分大小写的比较:

if ( txtCalender.Text.Equals(Resources.START_NOW,
                             StringComparison.CurrentCultureIgnoreCase))
{
     //do something
}
于 2012-06-06T12:15:41.333 回答
1

我找到了答案并且它有效。这是解决方案,

当我从 Chrome 浏览器尝试时它不起作用,它适用于 Firefox。实际上,当我将两个字符串都转换为 char 数组时,

txtCalender.Text 返回 40 个字符,Resource.START_NOW 返回 46。所以我尝试使用 Normalize() 方法对字符串进行规范化

if(txtCalender.Text.Normalize() == Resources.START_NOW.Normalize())

当我没有使用 normalize 方法时,它会将一个字符解释为两个不同的字符。

它运行良好。感谢您的回答。

于 2012-06-06T12:24:06.167 回答
0

您可以与InvariantCulturein String.Equals(statis 方法)进行比较:

String.Equals("XXX", "XXX", StringComparison.InvariantCulture);

不确定这是否有帮助,其他人可以评论吗?我从来没有遇到过你的实际错误。

于 2012-06-06T12:16:59.080 回答
0

你可能需要使用.Equals

if(txt.Calendar.Text.Equals(Resources.START_NOW))
{ //...

如果不区分大小写的比较是您所追求的(通常是)StringComparison.OrdinalIgnoreCase用作调用的第二个参数.Equals

如果这不起作用 - 那么我可以建议你断点该行并检查实际值Resources.START_NOW- 这种相等比较失败的唯一可能原因是如果两个字符串真的不一样。所以我的猜测是你的文化管理工作不正常。

于 2012-06-06T12:17:21.470 回答
0

使用String.EqualsString.Compare

这两者之间存在一些性能差异。String.Compare 比 String.Equal 快,因为 String.Compare 是静态方法,而 String.Equals 是实例方法。

String.Equal 返回一个布尔值。当字符串相等时,String.Compare 返回 0,但如果它们不同,则返回正数或负数,具体取决于第一个字符串是在第二个字符串之前(小于)还是之后(大于)。因此,当您需要知道它们是否相同时使用 String.Equals,或者当您需要基于不只是相等性做出决定时使用 String.Compare。

于 2012-06-06T12:21:59.567 回答