簡體   English   中英

如何比較C#中的本地化字符串

[英]How to Compare localized strings in C#

當用戶輸入本地化字符串“XXXX”並且我將該字符串與我的本地化資源文件中的值進行比較時,我正在為ASP.NET Web應用程序進行本地化。

示例:

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

但是當我這樣做時,即使兩個字符串(本地化字符串)相等,它也會返回false。 即。

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

這是泰米爾語的本地化。

請幫忙..

使用帶有StringComparison值的string.Equals重載之一 - 這允許您使用當前區域性進行比較。

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

或者,如果您想要不區分大小寫的比較:

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

我找到了答案並且有效。 這是解決方案,

當我嘗試使用Chrome瀏覽器時,它無法正常工作,而且可以與Firefox配合使用。 實際上,當我將兩個字符串轉換為字符數組時,

txtCalender.Text返回40個字符,Resource.START_NOW返回46.所以我試圖使用Normalize()方法對字符串進行規范化

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

當我沒有使用normalize方法時,它將一個字符解釋為兩個不同的字符。

它工作得很好。 謝謝你的回答。

您可以在String.Equals (statis方法)中與InvariantCulture進行比較:

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

不確定這是否有幫助,其他人可否對此發表評論? 我從未遇到過你的實際錯誤。

您可能需要使用.Equals

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

如果不區分大小寫的比較是你經常使用的,那么使用StringComparison.OrdinalIgnoreCase作為.Equals調用的第二個參數。

如果這不起作用 - 那么我可以建議你斷開這一行並檢查Resources.START_NOW的實際值 - 這個相等比較失敗的唯一可能原因是兩個字符串真的不一樣。 所以我的猜測是你的文化管理工作不正常。

使用String.EqualsString.Compare

這兩者之間存在一些性能差異。 String.Compare比String.Equal快,因為String.Compare是靜態方法而String.Equals是實例方法。

String.Equal返回一個布爾值。 String.Compare在字符串相等時返回0,但如果它們不同則返回正數或負數,具體取決於第一個字符串是在第二個字符串之前(更少)還是在(更大)第二個字符串之后。 因此,當您需要知道它們是否相同時使用String.Equals,或者當您需要基於多個相等性做出決策時使用String.Compare。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM