ResXResourceReader Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Enumera file e flussi di risorse XML (con estensione resx) e legge le coppie di valori e nome della risorsa sequenziale.
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 per scorrere le risorse in un file resx. Prima di tutto, il ResXResourceReaderrsxr
viene creato per il file items.resx
. Viene quindi usato il metodo GetEnumerator per creare un IDictionaryEnumerator 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 di metodi da questa classe con dati non attendibili è un rischio per la sicurezza. Chiamare i metodi da questa classe solo con dati attendibili. Per altre informazioni, vedere Convalidare tutti gli input.
La classe ResXResourceReader 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 classe ResourceReader.
Usare la classe ResXResourceReader per enumerare le risorse nei file con estensione resx attraversando l'enumeratore dizionario (IDictionaryEnumerator) restituito dal metodo GetEnumerator. 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 resx.
Nota
La classe ResXResourceReader fornisce due enumeratori. Il metodo ResXResourceReader.GetEnumerator restituisce un oggetto IDictionaryEnumerator; È consigliabile usare questo metodo per enumerare le risorse. Il metodo ResXResourceReader.IEnumerable.GetEnumerator è un'implementazione esplicita dell'interfaccia che restituisce un oggetto IEnumerator; non è consigliabile usarlo.
Nell'esempio seguente viene utilizzato il metodo GetEnumerator per ottenere un oggetto IDictionaryEnumerator utilizzato per enumerare le risorse in un file con estensione resx. L'esempio include una routine CreateResourceFile
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 proprietà UseResXDataNodes è true
, il valore della proprietà IDictionaryEnumerator.Value è un oggetto ResXDataNode anziché il valore della risorsa. In questo modo, il commento di un elemento della risorsa è disponibile dalla proprietà ResXDataNode.Comment. Nell'esempio seguente la proprietà UseResXDataNodes viene impostata 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 elementi ResXDataNode nell'enumerazione possono essere:
Risorse denominate insieme ai relativi dati. In questo caso, la proprietà ResXDataNode.FileRef è
null
.Risorse denominate insieme al nome del file che contiene i dati della risorsa. In questo caso, la proprietà ResXDataNode.FileRef restituisce un oggetto ResXFileRef che fornisce informazioni sulla risorsa, incluso il nome file. Se vengono usati nomi di file relativi, è consigliabile impostare sempre la proprietà BasePath 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 oggetto ResXResourceSet e chiamare i relativi metodi GetString
e GetObject
.
Nota
La classe ResXResourceReader contiene una richiesta di collegamento e una richiesta di ereditarietà a livello di classe applicabile a tutti i membri. Viene generata un'eccezione SecurityException quando il chiamante immediato o la classe derivata non dispone dell'autorizzazione di attendibilità completa.
Costruttori
ResXResourceReader(Stream) |
Inizializza una nuova istanza della classe ResXResourceReader per il flusso specificato. |
ResXResourceReader(Stream, AssemblyName[]) |
Inizializza una nuova istanza della classe ResXResourceReader utilizzando un flusso e una matrice di nomi di assembly. |
ResXResourceReader(Stream, ITypeResolutionService) |
Inizializza una nuova istanza della classe ResXResourceReader utilizzando un flusso di input e un servizio di risoluzione dei tipi. |
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 utilizzando un nome di file di risorse XML e una matrice di nomi di assembly. |
ResXResourceReader(String, ITypeResolutionService) |
Inizializza una nuova istanza della classe ResXResourceReader utilizzando un nome file e un servizio di risoluzione dei tipi. |
ResXResourceReader(TextReader) |
Inizializza una nuova istanza della classe ResXResourceReader per il TextReaderspecificato. |
ResXResourceReader(TextReader, AssemblyName[]) |
Inizializza una nuova istanza della classe ResXResourceReader utilizzando un oggetto TextReader e una matrice di nomi di assembly. |
ResXResourceReader(TextReader, ITypeResolutionService) |
Inizializza una nuova istanza della classe ResXResourceReader utilizzando un lettore di flusso di testo e un servizio di risoluzione dei tipi. |
Proprietà
BasePath |
Ottiene o imposta il percorso di base per il percorso del file relativo specificato in un oggetto ResXFileRef. |
UseResXDataNodes |
Ottiene o imposta un valore che indica se ResXDataNode oggetti vengono restituiti durante la lettura del flusso o del file di risorse XML corrente. |
Metodi
Close() |
Rilascia tutte le risorse usate dal ResXResourceReader. |
Dispose(Boolean) |
Rilascia le risorse non gestite usate dal ResXResourceReader e, facoltativamente, rilascia le risorse gestite. |
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
Finalize() |
Questo membro esegue l'override del metodo Finalize(). |
FromFileContents(String) |
Crea un nuovo oggetto ResXResourceReader e lo inizializza per leggere una stringa il cui contenuto è sotto forma di file di risorse XML. |
FromFileContents(String, AssemblyName[]) |
Crea un nuovo oggetto ResXResourceReader e lo inizializza per leggere una stringa il cui contenuto è sotto forma di file di risorse XML e per utilizzare una matrice di oggetti AssemblyName per risolvere i nomi dei tipi specificati in una risorsa. |
FromFileContents(String, ITypeResolutionService) |
Crea un nuovo oggetto ResXResourceReader e lo inizializza per leggere una stringa il cui contenuto è sotto forma di file di risorse XML e per utilizzare un oggetto ITypeResolutionService per risolvere i nomi dei 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 dizionario in grado di recuperare le proprietà in fase di progettazione dal file di risorse XML o dal flusso corrente. |
GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (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 dal ResXResourceReader e, facoltativamente, rilascia 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 IEnumerable al tipo specificato. |
OfType<TResult>(IEnumerable) |
Filtra gli elementi di un IEnumerable in base a un tipo specificato. |
AsParallel(IEnumerable) |
Abilita la parallelizzazione di una query. |
AsQueryable(IEnumerable) |
Converte un IEnumerable in un IQueryable. |