تحديد ما إذا كان يوجد مورد في ResourceManager
سؤال
وهناك على أية حال لتحديد ما إذا كان يحتوي على ResourceManager مورد اسمه؟ حاليا أنا اصطياد MissingManifestResourceException لكن أنا أكره الحاجة إلى استخدام الاستثناءات للحالات غير استثنائية. يجب أن يكون هناك طريقة لتعداد أزواج قيمة اسم ResourceManager من خلال التفكير، أو شيء من هذا؟
تعديل : في قليلا المزيد من التفاصيل. الموارد ليست في تنفيذ التجمع، ولكن ResourceManager تعمل على ما يرام. إذا حاولت _resourceMan.GetResourceSet(_defaultCuture, false, true)
أحصل اغية، في حين إذا حاولت _resourceMan.GetString("StringExists")
أحصل على سلسلة الظهر.
المحلول
ويمكنك استخدام ResourceSet للقيام بذلك، إلا أنه يحمل جميع البيانات في الذاكرة إذا كنت تعداد ذلك. هنا y'go:
// At startup.
ResourceManager mgr = Resources.ResourceManager;
List<string> keys = new List<string>();
ResourceSet set = mgr.GetResourceSet(CultureInfo.CurrentCulture, true, true);
foreach (DictionaryEntry o in set)
{
keys.Add((string)o.Key);
}
mgr.ReleaseAllResources();
Console.WriteLine(Resources.A);
نصائح أخرى
واعتقد انه يمكن استخدام شيء من هذا القبيل <لأ href = "http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getmanifestresourcenames(VS.80).aspx" يختلط = "نوفولو noreferrer "> Assembly.GetManifestResourceNames للتعداد قائمة الموارد المتاحة في بيان للجمعية. انها ليست جميلة ولا حل جميع الحالات الزاوية، ولكنه يعمل إذا لزم الأمر.