ResXResourceReader 類別

定義

列舉 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

如果 UseResXDataNodestrue ,列舉 ResXDataNode 中的專案可以是:

  • 具名資源及其資料。 在此情況下, ResXDataNode.FileRef 屬性為 null

  • 具名資源以及包含資源資料的檔案名。 在此情況下, ResXDataNode.FileRef 屬性會 ResXFileRef 傳回 物件,該物件會提供資源的相關資訊,包括其檔案名。 如果使用相對檔案名,您應該一律設定 BasePath 屬性來提供相對檔案路徑的參考點。

如果您想要從 .resx 檔案擷取具名資源,而不是列舉其資源,您可以具現化 ResXResourceSet 物件並呼叫其 GetStringGetObject 方法。

注意

類別 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

適用於

另請參閱