共用方式為


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 檔案中的資源。 首先,會為檔案 items.resx建立 ResXResourceReaderrsxr。 接下來,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 方法來取得用來列舉 .resx 檔案中資源的 IDictionaryEnumerator 物件。 此範例包含 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

適用於

另請參閱