ResXResourceReader Classe

Definizione

Enumera i flussi e i file di risorse XML (resx) e legge le coppie di nomi e valori delle risorse sequenziali.

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
Ereditarietà
ResXResourceReader
Implementazioni

Esempio

Nell'esempio seguente viene illustrato come usare un ResXResourceReader oggetto per scorrere le risorse in un file con estensione resx. Prima di tutto, ResXResourceReaderrsxr viene creato per il file items.resx. Viene quindi usato il GetEnumerator metodo per creare un IDictionaryEnumerator oggetto per scorrere le risorse e visualizzare il contenuto nella console.

#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

Commenti

Importante

La chiamata a metodi da questa classe con dati non attendibili costituisce un rischio per la sicurezza. Chiamare i metodi da questa classe solo con dati attendibili. Per altre informazioni, vedere Convalidare tutti gli input.

La ResXResourceReader classe fornisce un'implementazione predefinita dell'interfaccia IResourceReader che legge le informazioni sulle risorse in un formato XML. Per leggere le informazioni sulle risorse da un formato di risorsa binaria, usare la ResourceReader classe .

Usare la ResXResourceReader classe per enumerare le risorse nei file con estensione resx attraversando l'enumeratore dizionario (IDictionaryEnumerator) restituito dal GetEnumerator metodo . Si chiamano i metodi forniti da IDictionaryEnumerator per passare alla risorsa successiva e per leggere il nome e il valore di ogni risorsa nel file con estensione resx.

Nota

La ResXResourceReader classe fornisce due enumeratori. Il ResXResourceReader.GetEnumerator metodo restituisce un IDictionaryEnumerator oggetto. È consigliabile utilizzare questo metodo per enumerare le risorse. Il ResXResourceReader.IEnumerable.GetEnumerator metodo è un'implementazione esplicita dell'interfaccia che restituisce un IEnumerator oggetto. Non è consigliabile usarlo.

Nell'esempio seguente viene utilizzato il GetEnumerator metodo per ottenere un IDictionaryEnumerator oggetto utilizzato per enumerare le risorse in un file resx. L'esempio include una CreateResourceFile routine che crea il file di risorse necessario.

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

Se la UseResXDataNodes proprietà è true, il valore della IDictionaryEnumerator.Value proprietà è un ResXDataNode oggetto anziché il valore della risorsa. In questo modo, il commento di un elemento della risorsa è disponibile dalla ResXDataNode.Comment proprietà . L'esempio seguente imposta la UseResXDataNodes proprietà su true ed enumera le risorse in un file 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

Se UseResXDataNodes è true, gli ResXDataNode elementi nell'enumerazione possono essere:

  • Risorse denominate insieme ai dati. In questo caso, la ResXDataNode.FileRef proprietà è null.

  • Risorse denominate insieme al nome del file che contiene i dati della risorsa. In questo caso, la ResXDataNode.FileRef proprietà restituisce un ResXFileRef oggetto che fornisce informazioni sulla risorsa, incluso il nome file. Se vengono utilizzati nomi di file relativi, è sempre necessario impostare la BasePath proprietà per fornire un punto di riferimento per il percorso del file relativo.

Se si desidera recuperare risorse denominate da un file con estensione resx anziché enumerare le relative risorse, è possibile creare un'istanza di un ResXResourceSet oggetto e chiamare i GetString relativi metodi e GetObject .

Nota

La ResXResourceReader classe contiene una richiesta di collegamento e una richiesta di ereditarietà a livello di classe che si applica a tutti i membri. Viene generata un'eccezione SecurityException quando il chiamante immediato o la classe derivata non dispone dell'autorizzazione di attendibilità totale.

Costruttori

ResXResourceReader(Stream)

Inizializza una nuova istanza della classe ResXResourceReader per il flusso specificato.

ResXResourceReader(Stream, AssemblyName[])

Inizializza una nuova istanza della classe ResXResourceReader usando un flusso e una matrice di nomi di assembly.

ResXResourceReader(Stream, ITypeResolutionService)

Inizializza una nuova istanza della classe ResXResourceReader usando un flusso di input e un servizio di risoluzione del tipo.

ResXResourceReader(String)

Inizializza una nuova istanza della classe ResXResourceReader per il file di risorse specificato.

ResXResourceReader(String, AssemblyName[])

Inizializza una nuova istanza della classe ResXResourceReader usando un nome file di risorse XML e una matrice di nomi di assembly.

ResXResourceReader(String, ITypeResolutionService)

Inizializza una nuova istanza della classe ResXResourceReader usando un nome file e un servizio di risoluzione del tipo.

ResXResourceReader(TextReader)

Inizializza una nuova istanza della classe ResXResourceReader per l'oggetto TextReader specificato.

ResXResourceReader(TextReader, AssemblyName[])

Inizializza una nuova istanza della classe ResXResourceReader usando un oggetto TextReader e una matrice di nomi di assembly.

ResXResourceReader(TextReader, ITypeResolutionService)

Inizializza una nuova istanza della classe ResXResourceReader usando un lettore del flusso di testo e un servizio di risoluzione del tipo.

Proprietà

BasePath

Ottiene o imposta il percorso di base per il percorso file relativo specificato in un oggetto ResXFileRef.

UseResXDataNodes

Ottiene o imposta un valore che indica se gli oggetti ResXDataNode vengono restituiti durante la lettura del flusso o del file di risorse XML corrente.

Metodi

Close()

Rilascia tutte le risorse usate da ResXResourceReader.

Dispose(Boolean)

Rilascia le risorse non gestite usate da ResXResourceReader e, facoltativamente, le risorse gestite.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
Finalize()

Questo metodo esegue l'override del metodo Finalize().

FromFileContents(String)

Crea un nuovo oggetto ResXResourceReader e lo inizializza per la lettura di una stringa il cui contenuto è nel formato di file di risorse XML.

FromFileContents(String, AssemblyName[])

Crea un nuovo oggetto ResXResourceReader e lo inizializza per la lettura di una stringa il cui contenuto è nel formato di file di risorse XML e per l'uso di una matrice di oggetti AssemblyName per la risoluzione dei nomi di tipi specificati in una risorsa.

FromFileContents(String, ITypeResolutionService)

Crea un nuovo oggetto ResXResourceReader e lo inizializza per la lettura di una stringa il cui contenuto è nel formato di file di risorse XML e per l'uso di un oggetto ITypeResolutionService per la risoluzione dei nomi di tipi specificati in una risorsa.

GetEnumerator()

Restituisce un enumeratore per l'oggetto ResXResourceReader corrente.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetMetadataEnumerator()

Fornisce un enumeratore di dizionario in grado di recuperare le proprietà in fase di progettazione dal flusso o dal file di risorse XML corrente.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

IDisposable.Dispose()

Rilascia le risorse non gestite usate da ResXResourceReader e, facoltativamente, le risorse gestite. Per una descrizione di questo membro, vedere il metodo Dispose().

IEnumerable.GetEnumerator()

Restituisce un enumeratore per l'oggetto ResXResourceReader corrente. Per una descrizione di questo membro, vedere il metodo GetEnumerator().

Metodi di estensione

Cast<TResult>(IEnumerable)

Esegue il cast degli elementi di un oggetto IEnumerable nel tipo specificato.

OfType<TResult>(IEnumerable)

Filtra gli elementi di un oggetto IEnumerable in base a un tipo specificato.

AsParallel(IEnumerable)

Consente la parallelizzazione di una query.

AsQueryable(IEnumerable)

Converte un oggetto IEnumerable in un oggetto IQueryable.

Si applica a

Vedi anche