ResXResourceReader Класс

Определение

Перечисляет файлы (.resx) и потоки XML-ресурсов, считывая последовательно пары "имя — значение" для ресурсов.

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-файлах путем обхода перечислителя словаря (IDictionaryEnumerator), возвращаемого методом GetEnumerator . Методы, предоставляемые , вызываются для 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 свойства . В следующем примере свойству UseResXDataNodestrue присваивается значение и перечисляются ресурсы в 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

Если UseResXDataNodes имеет значение true, ResXDataNode элементы в перечислении могут быть следующими:

  • Именованные ресурсы вместе с их данными. В этом случае ResXDataNode.FileRef свойство имеет значение null.

  • Именованные ресурсы вместе с именем файла, содержащего данные ресурса. В этом случае свойство возвращает объект , ResXDataNode.FileRef предоставляющий ResXFileRef сведения о ресурсе, включая его имя файла. Если используются относительные имена файлов, всегда следует задать BasePath свойство , чтобы предоставить ссылку на относительный путь к файлу.

Если требуется получить именованные ресурсы из RESX-файла, а не перечислять его ресурсы, можно создать ResXResourceSet экземпляр объекта и вызвать его GetString методы и GetObject .

Примечание

Класс ResXResourceReader содержит требование ссылки и требование наследования на уровне класса, которое применяется ко всем членам. Исключение SecurityException возникает, если непосредственный вызывающий объект или производный класс не имеют разрешения с полным доверием.

Конструкторы

ResXResourceReader(Stream)

Инициализирует новый экземпляр класса ResXResourceReader для заданного потока.

ResXResourceReader(Stream, AssemblyName[])

Инициализирует новый экземпляр класса ResXResourceReader, используя поток и массив имен сборок.

ResXResourceReader(Stream, ITypeResolutionService)

Инициализирует новый экземпляр класса ResXResourceReader, используя входной поток и службу разрешения типов.

ResXResourceReader(String)

Инициализирует новый экземпляр класса ResXResourceReader для указанного имени файла ресурсов.

ResXResourceReader(String, AssemblyName[])

Инициализирует новый экземпляр класса ResXResourceReader, используя имя файла ресурсов XML и массив имен сборок.

ResXResourceReader(String, ITypeResolutionService)

Инициализирует новый экземпляр класса ResXResourceReader, используя имя файла и службу разрешения типов.

ResXResourceReader(TextReader)

Инициализирует новый экземпляр класса ResXResourceReader для указанного объекта TextReader.

ResXResourceReader(TextReader, AssemblyName[])

Инициализирует новый экземпляр класса ResXResourceReader, используя объект TextReader и массив имен сборок.

ResXResourceReader(TextReader, ITypeResolutionService)

Инициализирует новый экземпляр класса ResXResourceReader, используя средство чтения текстового потока и службу разрешения типов.

Свойства

BasePath

Возвращает или задает базовый путь для относительного пути к файлу, заданному в объекте ResXFileRef.

UseResXDataNodes

Получает или задает значение, указывающее, производится ли возвращение объектов ResXDataNode при чтении текущего файла XML-ресурсов или потока.

Методы

Close()

Освобождает все ресурсы, занятые модулем ResXResourceReader.

Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом ResXResourceReader, а при необходимости освобождает также управляемые ресурсы.

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, а при необходимости освобождает также управляемые ресурсы. Описание этого элемента содержится в методе Dispose().

IEnumerable.GetEnumerator()

Возвращает перечислитель для текущего объекта ResXResourceReader. Описание этого элемента содержится в методе GetEnumerator().

Методы расширения

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.

Применяется к

См. также раздел