ResXResourceReader.UseResXDataNodes 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置一个值,该值指示是否在读取当前 XML 资源文件或流时返回 ResXDataNode 对象。
public:
property bool UseResXDataNodes { bool get(); void set(bool value); };
public bool UseResXDataNodes { get; set; }
member this.UseResXDataNodes : bool with get, set
Public Property UseResXDataNodes As Boolean
属性值
如果检索资源数据节点,则为 true
;如果忽略资源数据节点,则为 false
。
例外
在设置操作中,资源文件或流的枚举数已经打开。
示例
以下示例枚举并显示 XML 文件中的资源项。 最初, UseResXDataNodes 设置为 false
,以在资源文件中显示数据和元数据项。 第二个枚举的 UseResXDataNodes 设置为 true
,以便资源数据元素作为 ResXDataNode 对象返回。
#using <System.dll>
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Collections;
using namespace System::Resources;
using namespace System::ComponentModel::Design;
namespace UseDataNodesExample
{
public ref class Program
{
public:
static void Main()
{
Console::WriteLine("\nEnumerating as data items...");
EnumResourceItems("Resource1.resx", false);
Console::WriteLine("\nEnumerating as data nodes...");
EnumResourceItems("Resource1.resx", true);
}
static void EnumResourceItems(String^ resxFile, bool useDataNodes)
{
ResXResourceReader^ reader = gcnew ResXResourceReader(resxFile);
reader->UseResXDataNodes = useDataNodes;
// Enumerate using IEnumerable.GetEnumerator().
Console::WriteLine("\n Default enumerator:");
for each (DictionaryEntry entry in reader)
{
ShowResourceItem(entry, useDataNodes);
}
// Enumerate using GetMetadataEnumerator()
IDictionaryEnumerator^ metadataEnumerator = reader->GetMetadataEnumerator();
Console::WriteLine("\n MetadataEnumerator:");
while (metadataEnumerator->MoveNext())
{
ShowResourceItem(metadataEnumerator->Entry, useDataNodes);
}
// Enumerate using GetEnumerator()
IDictionaryEnumerator^ enumerator = reader->GetEnumerator();
Console::WriteLine("\n Enumerator:");
while (enumerator->MoveNext())
{
ShowResourceItem(enumerator->Entry, useDataNodes);
}
delete reader;
}
static void ShowResourceItem(DictionaryEntry entry, bool isDataNode)
{
// Use a nullptr type resolver.
ITypeResolutionService^ typeres = nullptr;
ResXDataNode^ dnode;
if (isDataNode)
{
// Display from node info.
dnode = (ResXDataNode^)entry.Value;
Console::WriteLine(" {0}={1}", dnode->Name, dnode->GetValue(typeres));
}
else
{
// Display as DictionaryEntry info.
Console::WriteLine(" {0}={1}", entry.Key, entry.Value);
}
}
};
}
int main()
{
UseDataNodesExample::Program::Main();
}
// The example program will have the following output:
//
// Enumerating as data items...
//
// Default enumerator:
// DataSample=Sample DATA value
//
// MetadataEnumerator:
// MetadataSample=Sample METADATA value
//
// Enumerator:
// DataSample=Sample DATA value
//
// Enumerating as data nodes...
//
// Default enumerator:
// DataSample=Sample DATA value
// MetadataSample=Sample METADATA value
//
// MetadataEnumerator:
//
// Enumerator:
// DataSample=Sample DATA value
// MetadataSample=Sample METADATA value
using System;
using System.Collections;
using System.Resources;
using System.ComponentModel.Design;
namespace UseDataNodesExample
{
public class Program
{
public static void Main()
{
Console.WriteLine("\nEnumerating as data items...");
EnumResourceItems("Resource1.resx", false);
Console.WriteLine("\nEnumerating as data nodes...");
EnumResourceItems("Resource1.resx", true);
}
public static void EnumResourceItems(string resxFile, bool useDataNodes)
{
using (ResXResourceReader reader = new ResXResourceReader(resxFile))
{
reader.UseResXDataNodes = useDataNodes;
// Enumerate using IEnumerable.GetEnumerator().
Console.WriteLine("\n Default enumerator:");
foreach (DictionaryEntry entry in reader)
{
ShowResourceItem(entry, useDataNodes);
}
// Enumerate using GetMetadataEnumerator()
IDictionaryEnumerator metadataEnumerator = reader.GetMetadataEnumerator();
Console.WriteLine("\n MetadataEnumerator:");
while (metadataEnumerator.MoveNext())
{
ShowResourceItem(metadataEnumerator.Entry, useDataNodes);
}
// Enumerate using GetEnumerator()
IDictionaryEnumerator enumerator = reader.GetEnumerator();
Console.WriteLine("\n Enumerator:");
while (enumerator.MoveNext())
{
ShowResourceItem(enumerator.Entry, useDataNodes);
}
}
}
public static void ShowResourceItem(DictionaryEntry entry, bool isDataNode)
{
// Use a null type resolver.
ITypeResolutionService typeres = null;
ResXDataNode dnode;
if (isDataNode)
{
// Display from node info.
dnode = (ResXDataNode)entry.Value;
Console.WriteLine(" {0}={1}", dnode.Name, dnode.GetValue(typeres));
}
else
{
// Display as DictionaryEntry info.
Console.WriteLine(" {0}={1}", entry.Key, entry.Value);
}
}
}
}
// The example program will have the following output:
//
// Enumerating as data items...
//
// Default enumerator:
// DataSample=Sample DATA value
//
// MetadataEnumerator:
// MetadataSample=Sample METADATA value
//
// Enumerator:
// DataSample=Sample DATA value
//
// Enumerating as data nodes...
//
// Default enumerator:
// DataSample=Sample DATA value
// MetadataSample=Sample METADATA value
//
// MetadataEnumerator:
//
// Enumerator:
// DataSample=Sample DATA value
// MetadataSample=Sample METADATA value
Imports System.Collections
Imports System.Resources
Imports System.ComponentModel.Design
Namespace UseDataNodesExample
Public Class Program
Public Shared Sub Main()
Console.WriteLine(Environment.NewLine + "Enumerating as data items...")
EnumResourceItems("Resource1.resx", False)
Console.WriteLine(Environment.NewLine + "Enumerating as data nodes...")
EnumResourceItems("Resource1.resx", True)
End Sub
Public Shared Sub EnumResourceItems(resxFile As String, useDataNodes As Boolean)
Using reader As New ResXResourceReader(resxFile)
reader.UseResXDataNodes = useDataNodes
' Enumerate using IEnumerable.GetEnumerator().
Console.WriteLine(Environment.NewLine + " Default enumerator:")
For Each entry As DictionaryEntry In reader
ShowResourceItem(entry, useDataNodes)
Next entry
' Enumerate using GetMetadataEnumerator()
Dim metadataEnumerator As IDictionaryEnumerator = reader.GetMetadataEnumerator()
Console.WriteLine(Environment.NewLine + " MetadataEnumerator:")
While metadataEnumerator.MoveNext()
ShowResourceItem(metadataEnumerator.Entry, useDataNodes)
End While
' Enumerate using GetEnumerator()
Dim enumerator As IDictionaryEnumerator = reader.GetEnumerator()
Console.WriteLine(Environment.NewLine + " Enumerator:")
While enumerator.MoveNext()
ShowResourceItem(enumerator.Entry, useDataNodes)
End While
End Using
End Sub
Public Shared Sub ShowResourceItem(entry As DictionaryEntry, isDataNode As Boolean)
' Use a Nothing type resolver.
Dim typeres As ITypeResolutionService = Nothing
Dim dnode As ResXDataNode
If isDataNode Then
' Display from node info.
dnode = CType(entry.Value, ResXDataNode)
Console.WriteLine(" {0}={1}", dnode.Name, dnode.GetValue(typeres))
Else
' Display as DictionaryEntry info.
Console.WriteLine(" {0}={1}", entry.Key, entry.Value)
End If
End Sub
End Class
End Namespace
' The example program will have the following output:
'
' Enumerating as data items...
'
' Default enumerator:
' DataSample=Sample DATA value
'
' MetadataEnumerator:
' MetadataSample=Sample METADATA value
'
' Enumerator:
' DataSample=Sample DATA value
'
' Enumerating as data nodes...
'
' Default enumerator:
' DataSample=Sample DATA value
' MetadataSample=Sample METADATA value
'
' MetadataEnumerator:
'
' Enumerator:
' DataSample=Sample DATA value
' MetadataSample=Sample METADATA value
示例使用的资源 XML 文件包含一个数据节点和一个元数据节点。 若要将 XML 文件与上一个示例一起使用,请复制以下文本并将其保存到名为 Resource1.resx 的文件。
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="DataSample" xml:space="preserve">
<value>Sample DATA value</value>
</data>
<metadata name="MetadataSample">
<value>Sample METADATA value</value>
</metadata>
</root>
注解
可以在开始枚举资源之前设置 UseResXDataNodes 属性。 默认情况下,其值为 false
。