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. |
Применяется к
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по