2016-09-23 33 views
1

我知道從資源文件中獲取字符串的兩種方法。直接訪問resource.resx而不是ResourceManager會更好嗎?

方法1:直接訪問。

string str = _NAMESPACE.Properties.Resources.HelloWorld; 

方法2:通過ResourceManager。

ResourceManager rm = new ResourceManager("_NAMESPACE.Properties.Resources", Assembly.GetExecutingAssembly()); 
string str = rm.GetString("HelloWorld"); 

如果有多個本地化資源文件,這兩個方法都會得到正確的本地化字符串。

如果我在字符串鍵中輸入錯誤,method1會在構建時失敗。方法2將在運行時間之前失敗。出於這個原因,我認爲method1比method2更好。

我在這個論壇發現了一些類似的問題。但是,對於我的問題,我仍然無法得到很好的答案。

  1. Why is it better to call the ResourceManager class as opposed to loading resources directly by name?

  2. Need to use ResourceManager + GetString to support cultures OR I can just point directly at the resource file?

是真的方法1更好?

+2

看看第二個代碼中的所有硬編碼字符串!第一個更容易重構。 –

+0

如果您希望將資源劃分爲多個*資源文件(例如,「Properties.Messages」,「Properties.Icons」等),請參閱[此問題](http://stackoverflow.com/q/5246631/1497596)及其答案。 – DavidRR

回答

2

我相信第一種方法更好,因爲當您使用第二種方法創建資源管理器的新實例時,我認爲這是一種不必要的內存使用。

編輯*

看完這篇文章: https://msdn.microsoft.com/en-us/library/7k989cfy(v=vs.90).aspx

看來他們基本上是相同的,直接與資源類訪問資源時,在內部資源管理類用於創建一個實例物體。

+2

你絕對正確的使用'ResourceManager'類,但這並不否定你在snippet 2中創建新實例的觀點。第一個版本會創建一個實例並根據需要多次重複使用它。 –

+0

@BenVoigt啊,謝謝你的確認,這是我原來的思路,經過努力思考之後,我開始懷疑自己。 – Raevan

相關問題