如何在C#中查找Properties.Resources的所有成员

4

我有一些资源在一个C#程序集中,我通过以下方式进行访问:

byte[] foob = Properties.Resources.foo;
byte[] barb = Properties.Resources.bar;
...

我希望能够遍历这些资源,而不必保留已添加的索引。是否有一种方法可以返回所有资源?

3个回答

5

编辑:结果证明它们是属性而不是字段,因此:

foreach (PropertyInfo property in typeof(Properties.Resources).GetProperties
    (BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
{
    Console.WriteLine("{0}: {1}", property.Name, property.GetValue(null, null));
}

请注意,这也将为您提供“ResourceManager”和“Culture”属性。

通过 GetManifestResource* 直接访问资源不比这种方式慢吗? - Thomas Levesque
它们执行不同的任务。首先,您可能在汇编中拥有不在“Properties.Resources”中的内容,其次,这为您提供了单独的资源而不是资源文件。例如,如果您有两个字符串资源,则它们可能都在同一个资源文件中 - 查找资源名称意味着加载文件,然后请求该文件中的名称等。 - Jon Skeet
换句话说,这个答案做了问题明确要求的事情 :) - Jon Skeet

2
尝试使用 Assembly.GetManifestResourceNames()。像这样调用它:
Assembly.GetExecutingAssembly().GetManifestResourceNames()

编辑:要获取资源,请调用Assembly.GetManifestResouceStream(),或者查看更多详细信息,请使用Assembly.GetManifestResourceInfo()


0

CampingProfile 是资源文件。

var resources =  CampingProfile.ResourceManager.GetResourceSet(CultureInfo.CurrentCulture, true, true);
foreach (DictionaryEntry resource in resources)
{
    ;
}

这将为您提供资源文件中的所有属性,而不包括其他属性


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接