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您可以使用 類別來列舉 .resx 檔案中的資源,方法是周遊 方法傳GetEnumerator回的字典列舉值 (IDictionaryEnumerator) 。 您可以呼叫 所提供的 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 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。 |
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 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。 如需這個成員的描述,請參閱 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 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應