2012-10-21 82 views
2

我有一個類庫項目中的資源文件。我正在使用這個資源文件來保存用戶可能最終看到的各種消息。如何在使用ResourceManager.GetString()時避免使用魔法字符串?

例如,資源的名稱是「InvalidEmailAddress」,並且en-US資源文件中的值是「無效的電子郵件地址」。

當我調用ResourceManager的GetString的(string)方法我這樣做:

return resourceManager.GetString("InvalidEmailAddress"); 

然而,這似乎真的對我不好。如果有人更改資源的名稱怎麼辦?現在我的聲明將返回一個空值。

有沒有辦法解決這個問題?

UPDATE:本地化是一個重要的因素。資源管理器用於確保我可以更改文化並獲取適當的字符串值。

回答

5

您可以改爲使用自動生成的類 - 魔術字符串常量將從代碼中移除並替換爲強類型訪問方法。 VS將此文件命名爲ResourceName.Designer.cs,並在每次在VS中修改resx時更新它。

樣品生成的方法:

internal static string String1 { 
     get { 
      return ResourceManager.GetString("String1", resourceCulture); 
     } 

注:創建這個文件是當你添加在VS新資源的默認行爲,您可能已經禁用它,或者你可以嘗試使用生成的程序集外的資源。在這種情況下,確保將「自定義工具」屬性或resx文件設置爲「PublicResXFileCodeGenerator」或「ResXFileCodeGenerator」(稍後如果僅在單個程序集中使用資源)。 (感謝@dbaseman的評論)。

+1

可能必須將「自定義工具」屬性更改爲「PublicResXFileCodeGenerator」。 – McGarnagle

+0

這將繞過ResourceManager。本地化仍然有效嗎?例如,如果我將CurrentCulture設置爲「de-GR」,那麼資源管理器就足夠聰明,可以開始拉動德語等價字符串。 –

+0

@SailingJudo,爲什麼?你有沒有選擇生成的代碼? –

2

當您創建一個資源時,它將在Resources命名空間中被強制生成。

您可以通過Resources.ClassName.InvalidEmailAddress來訪問它,其中ClassName是您的資源(resx)文件的名稱。

+0

請參閱我的評論關於位置在阿列克謝的答案。 –

相關問題