Sdílet prostřednictvím


ResXResourceReader Třída

Definice

Vytvoří výčet souborů a datových proudů prostředků XML (.resx) a přečte sekvenční páry názvu a hodnoty prostředku.

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
Dědičnost
ResXResourceReader
Implementuje

Příklady

Následující příklad ukazuje, jak použít ResXResourceReader k iteraci prostřednictvím prostředků v souboru .resx. Nejprve se ResXResourceReaderrsxr vytvoří pro soubor items.resx. Dále se GetEnumerator metoda používá k vytvoření IDictionaryEnumerator iterace prostřednictvím prostředků a zobrazení obsahu konzoly.

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

Poznámky

Důležitý

Volání metod z této třídy s nedůvěryhodnými daty představuje bezpečnostní riziko. Volejte metody z této třídy pouze s důvěryhodnými daty. Další informace naleznete v tématu Ověření všech vstupů.

Třída ResXResourceReader poskytuje výchozí implementaci IResourceReader rozhraní, které čte informace o prostředcích ve formátu XML. Ke čtení informací o prostředcích z binárního formátu prostředků použijte ResourceReader třídu.

Třídu použijete ResXResourceReader k vytvoření výčtu prostředků v souborech .resx procházením enumerátoru slovníku (IDictionaryEnumerator), který je vrácen metodou GetEnumerator . Metody, které IDictionaryEnumerator jsou k dispozici pro přechod k dalšímu prostředku, a ke čtení názvu a hodnoty každého prostředku v souboru .resx.

Poznámka

Třída ResXResourceReader poskytuje dva enumerátory. Metoda ResXResourceReader.GetEnumerator vrátí IDictionaryEnumerator objekt. Doporučujeme použít tuto metodu k vytvoření výčtu prostředků. Metoda ResXResourceReader.IEnumerable.GetEnumerator je explicitní implementace rozhraní, která vrací IEnumerator objekt; nedoporučujeme jeho použití.

Následující příklad používá metodu GetEnumerator k získání objektu IDictionaryEnumerator , který se používá k vytvoření výčtu prostředků v souboru .resx. Příklad obsahuje rutinu CreateResourceFile , která vytvoří potřebný soubor prostředků.

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 Pokud je truevlastnost , hodnota IDictionaryEnumerator.Value vlastnosti je ResXDataNode objekt, nikoli hodnota prostředku. Tím zpřístupníte komentář k položce prostředku z ResXDataNode.Comment dané vlastnosti. Následující příklad nastaví UseResXDataNodes vlastnost na true a vytvoří výčet prostředků v souboru .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

Pokud UseResXDataNodes ano true, ResXDataNode položky v výčtu můžou být následující:

  • Pojmenované prostředky spolu s jejich daty V tomto případě ResXDataNode.FileRef je nullvlastnost .

  • Pojmenované prostředky spolu s názvem souboru, který obsahuje data o prostředcích. V tomto případě vrátí vlastnost ResXFileRef objekt, ResXDataNode.FileRef který poskytuje informace o prostředku, včetně jeho názvu souboru. Pokud se používají relativní názvy souborů, měli byste vždy nastavit BasePath vlastnost tak, aby poskytovala referenční bod pro relativní cestu k souboru.

Pokud chcete načíst pojmenované prostředky ze souboru .resx místo vytvoření výčtu prostředků, můžete vytvořit instanci objektu ResXResourceSet a volat jeho GetString a GetObject metody.

Poznámka

Třída ResXResourceReader obsahuje požadavek na propojení a požadavek dědičnosti na úrovni třídy, která se vztahuje na všechny členy. Výjimka SecurityException se vyvolá, pokud buď bezprostřední volající, nebo odvozená třída nemá oprávnění k úplnému vztahu důvěryhodnosti.

Konstruktory

Name Description
ResXResourceReader(Stream, AssemblyName[])

Inicializuje novou instanci ResXResourceReader třídy pomocí streamu a pole názvů sestavení.

ResXResourceReader(Stream, ITypeResolutionService)

Inicializuje novou instanci třídy pomocí vstupního datového ResXResourceReader proudu a služby překladu typu.

ResXResourceReader(Stream)

Inicializuje novou instanci ResXResourceReader třídy pro zadaný datový proud.

ResXResourceReader(String, AssemblyName[])

Inicializuje novou instanci ResXResourceReader třídy pomocí názvu souboru prostředku XML a pole názvů sestavení.

ResXResourceReader(String, ITypeResolutionService)

Inicializuje novou instanci ResXResourceReader třídy pomocí názvu souboru a služby překladu typů.

ResXResourceReader(String)

Inicializuje novou instanci ResXResourceReader třídy pro zadaný soubor prostředku.

ResXResourceReader(TextReader, AssemblyName[])

Inicializuje novou instanci ResXResourceReader třídy pomocí TextReader objektu a pole názvů sestavení.

ResXResourceReader(TextReader, ITypeResolutionService)

Inicializuje novou instanci ResXResourceReader třídy pomocí čtečky textového streamu a služby překladu typu.

ResXResourceReader(TextReader)

Inicializuje novou instanci ResXResourceReader třídy pro zadaný TextReader.

Vlastnosti

Name Description
BasePath

Získá nebo nastaví základní cestu pro relativní cestu k souboru zadanou v objektu ResXFileRef .

UseResXDataNodes

Získá nebo nastaví hodnotu, která určuje, zda ResXDataNode objekty jsou vráceny při čtení aktuálního souboru prostředků XML nebo datového proudu.

Metody

Name Description
Close()

Uvolní všechny prostředky používané nástrojem ResXResourceReader.

Dispose(Boolean)

Uvolní nespravované prostředky používané ResXResourceReader a volitelně uvolní spravované prostředky.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
Finalize()

Tento člen přepíše metodu Finalize() .

FromFileContents(String, AssemblyName[])

Vytvoří nový ResXResourceReader objekt a inicializuje ho ke čtení řetězce, jehož obsah je ve formě souboru prostředků XML, a k překladu názvů typů zadaných AssemblyName v prostředku pomocí pole objektů.

FromFileContents(String, ITypeResolutionService)

Vytvoří nový ResXResourceReader objekt a inicializuje jej ke čtení řetězce, jehož obsah je ve formě souboru prostředků XML, a k použití objektu ITypeResolutionService k překladu názvů typů zadaných v prostředku.

FromFileContents(String)

Vytvoří nový ResXResourceReader objekt a inicializuje jej pro čtení řetězce, jehož obsah je ve formě souboru prostředků XML.

GetEnumerator()

Vrátí enumerátor pro aktuální ResXResourceReader objekt.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetMetadataEnumerator()

Poskytuje enumerátor slovníku, který může načíst vlastnosti návrhu z aktuálního souboru prostředků XML nebo datového proudu.

GetType()

Získá Type aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Explicitní implementace rozhraní

Name Description
IDisposable.Dispose()

Uvolní nespravované prostředky používané ResXResourceReader a volitelně uvolní spravované prostředky. Popis tohoto člena najdete v Dispose() metodě.

IEnumerable.GetEnumerator()

Vrátí enumerátor pro aktuální ResXResourceReader objekt. Popis tohoto člena najdete v GetEnumerator() metodě.

Metody rozšíření

Name Description
AsParallel(IEnumerable)

Umožňuje paralelizaci dotazu.

AsQueryable(IEnumerable)

Převede IEnumerable na IQueryable.

Cast<TResult>(IEnumerable)

Přetypuje prvky IEnumerable na zadaný typ.

OfType<TResult>(IEnumerable)

Filtruje prvky IEnumerable na základě zadaného typu.

Platí pro

Viz také