ResXResourceReader 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
枚举 XML 资源 (.resx) 文件和流,并读取顺序资源名称和值对。
public ref class ResXResourceReader : System::Resources::IResourceReader
public ref class ResXResourceReader : IDisposable, System::Collections::IEnumerable, System::Resources::IResourceReader
public class ResXResourceReader : System.Resources.IResourceReader
public class ResXResourceReader : IDisposable, System.Collections.IEnumerable, System.Resources.IResourceReader
type ResXResourceReader = class
interface IResourceReader
interface IEnumerable
interface IDisposable
Public Class ResXResourceReader
Implements IResourceReader
Public Class ResXResourceReader
Implements IDisposable, IEnumerable, IResourceReader
- 继承
-
ResXResourceReader
- 实现
示例
以下示例演示如何使用 ResXResourceReader 循环访问 .resx 文件中的资源。 首先, ResXResourceReaderrsxr
为文件 items.resx
创建 。 接下来, GetEnumerator 方法用于创建 以 IDictionaryEnumerator 循环访问资源并将内容显示到控制台。
#using <system.windows.forms.dll>
#using <System.dll>
using namespace System;
using namespace System::Resources;
using namespace System::Collections;
void main()
{
// Create a ResXResourceReader for the file items.resx.
ResXResourceReader^ rsxr = gcnew ResXResourceReader( "items.resx" );
// Iterate through the resources and display the contents to the console.
IEnumerator^ myEnum = rsxr->GetEnumerator();
while ( myEnum->MoveNext() )
{
DictionaryEntry^ d = safe_cast<DictionaryEntry^>(myEnum->Current);
Console::WriteLine( "{0}:\t {1}", d->Key, d->Value );
}
//Close the reader.
rsxr->Close();
}
using System;
using System.Resources;
using System.Collections;
class ReadResXResources
{
public static void Main()
{
// Create a ResXResourceReader for the file items.resx.
ResXResourceReader rsxr = new ResXResourceReader("items.resx");
// 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();
}
}
Imports System.Resources
Imports System.Collections
Class ReadResXResources
Public Shared Sub Main()
' Create a ResXResourceReader for the file items.resx.
Dim rsxr As ResXResourceReader
rsxr = New ResXResourceReader("items.resx")
' Iterate through the resources and display the contents to the console.
Dim d As DictionaryEntry
For Each d In rsxr
Console.WriteLine(d.Key.ToString() + ":" + ControlChars.Tab + d.Value.ToString())
Next d
'Close the reader.
rsxr.Close()
End Sub
End Class
注解
重要
使用不受信任的数据调用此类中的方法存在安全风险。 仅使用受信任的数据调用此类中的方法。 有关详细信息,请参阅 验证所有输入。
类 ResXResourceReader 提供接口的默认实现, IResourceReader 该接口以 XML 格式读取资源信息。 若要从二进制资源格式读取资源信息,请使用 ResourceReader 类。
使用 ResXResourceReader 类通过遍历 方法返回GetEnumerator的字典枚举器 (IDictionaryEnumerator) 来枚举 .resx 文件中的资源。 调用 提供 IDictionaryEnumerator 的方法以转到下一个资源并读取 .resx 文件中每个资源的名称和值。
注意
类 ResXResourceReader 提供两个枚举器。 方法 ResXResourceReader.GetEnumerator 返回对象 IDictionaryEnumerator ;建议使用此方法枚举资源。 方法 ResXResourceReader.IEnumerable.GetEnumerator 是返回 IEnumerator 对象的显式接口实现;不建议使用它。
以下示例使用 GetEnumerator 方法获取 IDictionaryEnumerator 对象,该对象用于枚举 .resx 文件中的资源。 该示例包含一个 CreateResourceFile
例程,用于创建必要的资源文件。
using System;
using System.Collections;
using System.Resources;
public class Example
{
private const string resxFilename = @".\CountryHeaders.resx";
public static void Main()
{
// Create a resource file to read.
CreateResourceFile();
// Enumerate the resources in the file.
ResXResourceReader rr = new ResXResourceReader(resxFilename);
IDictionaryEnumerator dict = rr.GetEnumerator();
while (dict.MoveNext())
Console.WriteLine("{0}: {1}", dict.Key, dict.Value);
}
private static void CreateResourceFile()
{
ResXResourceWriter rw = new ResXResourceWriter(resxFilename);
string[] resNames = {"Country", "Population", "Area",
"Capital", "LCity" };
string[] columnHeaders = { "Country Name", "Population (2010}",
"Area", "Capital", "Largest City" };
string[] comments = { "The localized country name", "",
"The area in square miles", "",
"The largest city based on 2010 data" };
rw.AddResource("Title", "Country Information");
rw.AddResource("nColumns", resNames.Length);
for (int ctr = 0; ctr < resNames.Length; ctr++) {
ResXDataNode node = new ResXDataNode(resNames[ctr], columnHeaders[ctr]);
node.Comment = comments[ctr];
rw.AddResource(node);
}
rw.Generate();
rw.Close();
}
}
// The example displays the following output:
// Title: Country Information
// nColumns: 5
// Country: Country Name
// Population: Population (2010}
// Area: Area
// Capital: Capital
// LCity: Largest City
Imports System.Collections
Imports System.Resources
Module Example
Private Const resxFilename As String = ".\CountryHeaders.resx"
Public Sub Main()
' Create a resource file to read.
CreateResourceFile()
' Enumerate the resources in the file.
Dim rr As New ResXResourceReader(resxFilename)
Dim dict As IDictionaryEnumerator = rr.GetEnumerator()
Do While dict.MoveNext()
Console.WriteLine("{0}: {1}", dict.Key, dict.Value)
Loop
End Sub
Private Sub CreateResourceFile()
Dim rw As New ResxResourceWriter(resxFilename)
Dim resNames() As String = {"Country", "Population", "Area",
"Capital", "LCity" }
Dim columnHeaders() As String = { "Country Name", "Population (2010}",
"Area", "Capital", "Largest City" }
Dim comments() As String = { "The localized country name", "",
"The area in square miles", "",
"The largest city based on 2010 data" }
rw.AddResource("Title", "Country Information")
rw.AddResource("nColumns", resNames.Length)
For ctr As Integer = 0 To resNames.Length - 1
Dim node As New ResXDataNode(resNames(ctr), columnHeaders(ctr))
node.Comment = comments(ctr)
rw.AddResource(node)
Next
rw.Generate()
rw.Close()
End Sub
End Module
' The example displays the following output:
' Title: Country Information
' nColumns: 5
' Country: Country Name
' Population: Population (2010}
' Area: Area
' Capital: Capital
' LCity: Largest City
UseResXDataNodes如果 属性为 true
,则 属性的值IDictionaryEnumerator.Value是 ResXDataNode 对象,而不是资源值。 这样,资源项的注释就可从 ResXDataNode.Comment 属性获取。 以下示例将 UseResXDataNodes 属性设置为 true
,并枚举 .resx 文件中的资源,
using System;
using System.Collections;
using System.ComponentModel.Design;
using System.Resources;
public class Example
{
private const string resxFilename = @".\CountryHeaders.resx";
public static void Main()
{
// Create a resource file to read.
CreateResourceFile();
// Enumerate the resources in the file.
ResXResourceReader rr = new ResXResourceReader(resxFilename);
rr.UseResXDataNodes = true;
IDictionaryEnumerator dict = rr.GetEnumerator();
while (dict.MoveNext()) {
ResXDataNode node = (ResXDataNode) dict.Value;
Console.WriteLine("{0,-20} {1,-20} {2}",
node.Name + ":",
node.GetValue((ITypeResolutionService) null),
! String.IsNullOrEmpty(node.Comment) ? "// " + node.Comment : "");
}
}
private static void CreateResourceFile()
{
ResXResourceWriter rw = new ResXResourceWriter(resxFilename);
string[] resNames = {"Country", "Population", "Area",
"Capital", "LCity" };
string[] columnHeaders = { "Country Name", "Population (2010}",
"Area", "Capital", "Largest City" };
string[] comments = { "The localized country name", "",
"The area in square miles", "",
"The largest city based on 2010 data" };
rw.AddResource("Title", "Country Information");
rw.AddResource("nColumns", resNames.Length);
for (int ctr = 0; ctr < resNames.Length; ctr++) {
ResXDataNode node = new ResXDataNode(resNames[ctr], columnHeaders[ctr]);
node.Comment = comments[ctr];
rw.AddResource(node);
}
rw.Generate();
rw.Close();
}
}
// The example displays the following output:
// Title: Country Information
// nColumns: 5
// Country: Country Name // The localized country name
// Population: Population (2010}
// Area: Area // The area in square miles
// Capital: Capital
// LCity: Largest City // The largest city based on 2010 data
Imports System.Collections
Imports System.ComponentModel.Design
Imports System.Resources
Module Example
Private Const resxFilename As String = ".\CountryHeaders.resx"
Public Sub Main()
' Create a resource file to read.
CreateResourceFile()
' Enumerate the resources in the file.
Dim rr As New ResXResourceReader(resxFilename)
rr.UseResXDataNodes = True
Dim dict As IDictionaryEnumerator = rr.GetEnumerator()
Do While dict.MoveNext()
Dim node As ResXDataNode = DirectCast(dict.Value, ResXDataNode)
Console.WriteLine("{0,-20} {1,-20} {2}",
node.Name + ":",
node.GetValue(CType(Nothing, ITypeResolutionService)),
If(Not String.IsNullOrEmpty(node.Comment), "// " + node.Comment, ""))
Loop
End Sub
Private Sub CreateResourceFile()
Dim rw As New ResxResourceWriter(resxFilename)
Dim resNames() As String = {"Country", "Population", "Area",
"Capital", "LCity" }
Dim columnHeaders() As String = { "Country Name", "Population (2010}",
"Area", "Capital", "Largest City" }
Dim comments() As String = { "The localized country name", "",
"The area in square miles", "",
"The largest city based on 2010 data" }
rw.AddResource("Title", "Country Information")
rw.AddResource("nColumns", resNames.Length)
For ctr As Integer = 0 To resNames.Length - 1
Dim node As New ResXDataNode(resNames(ctr), columnHeaders(ctr))
node.Comment = comments(ctr)
rw.AddResource(node)
Next
rw.Generate()
rw.Close()
End Sub
End Module
' The example displays the following output:
' Title: Country Information
' nColumns: 5
' Country: Country Name // The localized country name
' Population: Population (2010}
' Area: Area // The area in square miles
' Capital: Capital
' LCity: Largest City // The largest city based on 2010 data
如果 UseResXDataNodes 为 true
, ResXDataNode 则枚举中的项可以是:
命名资源及其数据。 在本例中, ResXDataNode.FileRef 属性为
null
。命名资源以及包含资源数据的文件的名称。 在这种情况下, ResXDataNode.FileRef 属性返回一个 ResXFileRef 对象,该对象提供有关资源的信息,包括其文件名。 如果使用相对文件名,应始终设置 BasePath 属性以提供相对文件路径的引用点。
如果要从 .resx 文件检索命名资源,而不是枚举其资源,可以实例化 ResXResourceSet 对象并调用其 GetString
和 GetObject
方法。
注意
类 ResXResourceReader 包含应用于所有成员的类级别的链接需求和继承需求。 SecurityException当直接调用方或派生类没有完全信任权限时,将引发异常。
构造函数
ResXResourceReader(Stream) |
为指定的流初始化 ResXResourceReader 类的新实例。 |
ResXResourceReader(Stream, AssemblyName[]) |
使用流和程序集名称数组初始化 ResXResourceReader 类的新实例。 |
ResXResourceReader(Stream, ITypeResolutionService) |
使用输入流和类型解析服务初始化 ResXResourceReader 类的新实例。 |
ResXResourceReader(String) |
为指定的资源文件初始化 ResXResourceReader 类的新实例。 |
ResXResourceReader(String, AssemblyName[]) |
使用 XML 资源文件名和程序集名称数组初始化 ResXResourceReader 类的新实例。 |
ResXResourceReader(String, ITypeResolutionService) |
使用文件名和类型解析服务初始化 ResXResourceReader 类的新实例。 |
ResXResourceReader(TextReader) |
为指定的 TextReader 初始化 ResXResourceReader 类的新实例。 |
ResXResourceReader(TextReader, AssemblyName[]) |
使用 TextReader 对象和程序集名称数组初始化 ResXResourceReader 类的新实例。 |
ResXResourceReader(TextReader, ITypeResolutionService) |
使用文本流读取器和类型解析服务初始化 ResXResourceReader 类的新实例。 |
属性
BasePath |
获取或设置在 ResXFileRef 对象中指定的相对文件路径的基路径。 |
UseResXDataNodes |
获取或设置一个值,该值指示是否在读取当前 XML 资源文件或流时返回 ResXDataNode 对象。 |
方法
Close() |
释放由 ResXResourceReader 使用的所有资源。 |
Dispose(Boolean) |
释放由 ResXResourceReader 占用的非托管资源,还可以另外再释放托管资源。 |
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
Finalize() |
此成员重写 Finalize() 方法。 |
FromFileContents(String) |
创建一个新 ResXResourceReader 对象,然后将它初始化,以读取内容为 XML 资源文件格式的字符串。 |
FromFileContents(String, AssemblyName[]) |
创建一个新 ResXResourceReader 对象,然后将它初始化,以读取内容为 XML 资源文件格式的字符串并使用 AssemblyName 对象数组解析资源中指定的类型名称。 |
FromFileContents(String, ITypeResolutionService) |
创建一个新 ResXResourceReader 对象,然后将它初始化,以读取内容为 XML 资源文件格式的字符串并使用 ITypeResolutionService 对象解析资源中指定的类型名称。 |
GetEnumerator() |
返回当前 ResXResourceReader 对象的一个枚举器。 |
GetHashCode() |
作为默认哈希函数。 (继承自 Object) |
GetMetadataEnumerator() |
提供一个字典枚举数,该枚举数可以从当前 XML 资源文件或流中检索设计时属性。 |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |
显式接口实现
IDisposable.Dispose() |
释放由 ResXResourceReader 占用的非托管资源,还可以另外再释放托管资源。 有关此成员的说明,请参见 Dispose() 方法。 |
IEnumerable.GetEnumerator() |
返回当前 ResXResourceReader 对象的一个枚举器。 有关此成员的说明,请参见 GetEnumerator() 方法。 |
扩展方法
Cast<TResult>(IEnumerable) |
将 IEnumerable 的元素强制转换为指定的类型。 |
OfType<TResult>(IEnumerable) |
根据指定类型筛选 IEnumerable 的元素。 |
AsParallel(IEnumerable) |
启用查询的并行化。 |
AsQueryable(IEnumerable) |
将 IEnumerable 转换为 IQueryable。 |
适用于
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈