有没有办法循环遍历C#中.resx
文件中的所有资源?循环遍历.resx文件中的所有资源
回答
您应该始终使用资源管理器,而不是直接读取文件以确保全球化得到考虑。
using System.Collections;
using System.Globalization;
using System.Resources;
...
ResourceManager MyResourceClass = new ResourceManager(typeof(Resources /* Reference to your resources class -- may be named differently in your case */));
ResourceSet resourceSet = MyResourceClass.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
foreach (DictionaryEntry entry in resourceSet)
{
string resourceKey = entry.Key.ToString();
object resource = entry.Value;
}
我花了一点才弄明白,你需要这一行来声明MyResourceClass。 'ResourceManager MyResourceClass = new ResourceManager(“Resources.ResourceFileName”,System.Reflection.Assembly.Load(“App_GlobalResources”));' – JoeFletch 2012-09-20 02:11:17
@JoeFletch:它不需要这一行。代码直接调用资源文件。例如:我有一个名为PageList.resx的文件,然后我会调用:ResourceSet resourceSet = PageList.ResourceManager.GetResourceSet(CultureInfo。CurrentUICulture,真实,真实); – Gabriel 2013-02-06 11:23:57
@Gabriel,感谢您的更新!我将不得不回到我的代码来检查这一点。 – JoeFletch 2013-02-06 13:25:07
ResXResourceReader rsxr = new ResXResourceReader("your resource file path");
// Iterate through the resources and display the contents to the console.
foreach (DictionaryEntry d in rsxr)
{
Console.WriteLine(d.Key.ToString() + ":\t" + d.Value.ToString());
}
的博客上讲述它on my blog :)短的版本是,寻找资源的全名(除非你已经知道他们):
var assembly = Assembly.GetExecutingAssembly();
foreach (var resourceName in assembly.GetManifestResourceNames())
System.Console.WriteLine(resourceName);
要使用所有这些东西:
foreach (var resourceName in assembly.GetManifestResourceNames())
{
using(var stream = assembly.GetManifestResourceStream(resourceName))
{
// Do something with stream
}
}
要使用除正在执行的程序集外的其他程序集中的资源,只需使用Assembly
类的其他静态方法获得不同的程序集对象。希望它有所帮助:)
将资源.RESX文件添加到项目的一分钟,Visual Studio将创建一个具有相同名称的Designer.cs,为资源的所有项目创建一个类作为静态属性。在键入资源文件的名称后,在编辑器中键入点时,可以看到资源的所有名称。
或者,您可以使用反射循环这些名称。
Type resourceType = Type.GetType("AssemblyName.Resource1");
PropertyInfo[] resourceProps = resourceType.GetProperties(
BindingFlags.NonPublic |
BindingFlags.Static |
BindingFlags.GetProperty);
foreach (PropertyInfo info in resourceProps)
{
string name = info.Name;
object value = info.GetValue(null, null); // object can be an image, a string whatever
// do something with name and value
}
这种方法显然只在RESX文件在当前程序集或工程的范围内时才可用。否则,使用“脉冲”提供的方法。
此方法的优点是您可以调用为您提供的实际属性,并根据您的需要考虑任何本地化。但是,它是相当多余的,因为通常你应该使用类型安全的直接方法来调用资源的属性。
为什么在ResourceSet可用时使用反射? – 2010-01-11 10:12:18
这就是我想知道的(见最后一段)。只是想展示一种替代方法,但更重要的是,想要表明该课程是完全可以访问的,并且不需要手工操作(第一段)。 – Abel 2010-01-11 10:14:02
// Create a ResXResourceReader for the file items.resx.
ResXResourceReader rsxr = new ResXResourceReader("items.resx");
// Create an IDictionaryEnumerator to iterate through the resources.
IDictionaryEnumerator id = rsxr.GetEnumerator();
// Iterate through the resources and display the contents to the console.
foreach (DictionaryEntry d in rsxr)
{
Console.WriteLine(d.Key.ToString() + ":\t" + d.Value.ToString());
}
//Close the reader.
rsxr.Close();
请注意,这个类位于'System.Windows.Forms'程序集中,如果您使用的是MVC应用程序,则不会自动添加 – 2016-08-22 17:18:06
使用LINQ to SQL:
XDocument
.Load(resxFileName)
.Descendants()
.Where(_ => _.Name == "data")
.Select(_ => $"{ _.Attributes().First(a => a.Name == "name").Value} - {_.Value}");
如果你想使用LINQ,使用resourceSet.OfType<DictionaryEntry>()
。使用LINQ可以让你,例如,基于其指数(INT)选择资源,而不是重点(串):
ResourceSet resourceSet = Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
foreach (var entry in resourceSet.OfType<DictionaryEntry>().Select((item, i) => new { Index = i, Key = item.Key, Value = item.Value }))
{
Console.WriteLine(@"[{0}] {1}", entry.Index, entry.Key);
}
- 1. 没有循环遍历所有文件
- 2. 循环遍历ResourceManager中的所有资源 - C#
- 3. 循环遍历R中的文件夹中的所有文件
- 4. 循环遍历所有值
- 5. Shellscript循环遍历文件夹中的所有文件
- 6. 循环遍历UITableView中的所有UITextFields
- 7. 循环遍历文件名
- 8. 使用'for'循环遍历目录中的所有文件
- 9. 循环遍历所有子文件夹并执行bat文件?
- 10. 循环遍历所有的记录和
- 11. 循环遍历类的所有对象
- 12. 循环遍历所有组合
- 13. Sqlite循环遍历所有表
- 14. 循环遍历所有工作表VBA
- 15. 如何循环遍历所有路线?
- 16. 显示resx文件中的所有资源字符串
- 17. ASP.NET .resx资源文件中的有效资源密钥
- 18. Python for循环没有循环遍历所有项目
- 19. Powerpoint VBA循环没有循环遍历所有幻灯片
- 20. 资源(RESX)文件搞砸
- 21. 写RESX文件,没有资源
- 22. Powerpoint VBA循环遍历文件夹中的所有演示文稿
- 23. 循环遍历R中的同一目录中的所有文件
- 24. 批量循环遍历文件
- 25. FOR循环遍历两个文件夹
- 26. 循环遍历可变文件名
- 27. 循环遍历页面上的所有用户控件
- 28. 循环遍历LinkedList
- 29. 循环遍历ColdFusion中多个目录中的所有图像
- 30. 如何让这个脚本循环遍历目录中的所有文件?
你能在RESX文件是否是内部项目还是你想阐述(或需要)读取一个单独的RESX文件或从另一个程序集读取RESX? – Abel 2010-01-11 10:18:09