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-файле. Во-первых, ResXResourceReaderrsxr создается для файла items.resx.
GetEnumerator Затем метод используется для создания IDictionaryEnumerator итерации ресурсов и отображения содержимого в консоли.
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 свойства. В следующем примере свойство true присваивается UseResXDataNodes и перечисляет ресурсы в 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, AssemblyName[]) |
Инициализирует новый экземпляр ResXResourceReader класса с помощью потока и массива имен сборок. |
| ResXResourceReader(Stream, ITypeResolutionService) |
Инициализирует новый экземпляр ResXResourceReader класса с помощью входного потока и службы разрешения типов. |
| ResXResourceReader(Stream) |
Инициализирует новый экземпляр класса для указанного ResXResourceReader потока. |
| ResXResourceReader(String, AssemblyName[]) |
Инициализирует новый экземпляр ResXResourceReader класса с помощью имени XML-файла ресурсов и массива имен сборок. |
| ResXResourceReader(String, ITypeResolutionService) |
Инициализирует новый экземпляр ResXResourceReader класса с помощью имени файла и службы разрешения типов. |
| ResXResourceReader(String) |
Инициализирует новый экземпляр класса для указанного ResXResourceReader файла ресурсов. |
| ResXResourceReader(TextReader, AssemblyName[]) |
Инициализирует новый экземпляр ResXResourceReader класса с помощью TextReader объекта и массива имен сборок. |
| ResXResourceReader(TextReader, ITypeResolutionService) |
Инициализирует новый экземпляр класса с помощью средства чтения текстовых ResXResourceReader потоков и службы разрешения типов. |
| ResXResourceReader(TextReader) |
Инициализирует новый экземпляр класса для указанного ResXResourceReaderTextReader. |
Свойства
| Имя | Описание |
|---|---|
| BasePath |
Возвращает или задает базовый путь для относительного пути к файлу, указанному в объекте ResXFileRef . |
| UseResXDataNodes |
Возвращает или задает значение, указывающее, возвращаются ли ResXDataNode объекты при чтении текущего XML-файла ресурсов или потока. |
Методы
| Имя | Описание |
|---|---|
| Close() |
Освобождает все ресурсы, используемые параметром ResXResourceReader. |
| Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые ResXResourceReader и при необходимости освобождает управляемые ресурсы. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| Finalize() |
Этот элемент переопределяет Finalize() метод. |
| FromFileContents(String, AssemblyName[]) |
Создает объект ResXResourceReader и инициализирует его для чтения строки, содержимое которой содержится в виде XML-файла ресурсов, а также для разрешения имен типов, указанных AssemblyName в ресурсе, массив объектов. |
| FromFileContents(String, ITypeResolutionService) |
Создает новый ResXResourceReader объект и инициализирует его для чтения строки, содержимое которой содержится в виде XML-файла ресурсов, а также для разрешения ITypeResolutionService имен типов, указанных в ресурсе. |
| FromFileContents(String) |
Создает новый ResXResourceReader объект и инициализирует его для чтения строки, содержимое которой содержится в виде XML-файла ресурсов. |
| GetEnumerator() |
Возвращает перечислитель для текущего ResXResourceReader объекта. |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetMetadataEnumerator() |
Предоставляет перечислитель словаря, который может получить свойства времени разработки из текущего XML-файла ресурсов или потока. |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IDisposable.Dispose() |
Освобождает неуправляемые ресурсы, используемые ResXResourceReader и при необходимости освобождает управляемые ресурсы. Описание этого элемента см. в описании Dispose() метода. |
| IEnumerable.GetEnumerator() |
Возвращает перечислитель для текущего ResXResourceReader объекта. Описание этого элемента см. в описании GetEnumerator() метода. |
Методы расширения
| Имя | Описание |
|---|---|
| AsParallel(IEnumerable) |
Включает параллелизацию запроса. |
| AsQueryable(IEnumerable) |
Преобразует IEnumerable в IQueryable. |
| Cast<TResult>(IEnumerable) |
Приведение элементов IEnumerable к указанному типу. |
| OfType<TResult>(IEnumerable) |
Фильтрует элементы IEnumerable на основе указанного типа. |