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 檔案中的資源專案。 一開始,會設定為 false
,UseResXDataNodes以在資源檔中顯示數據和元數據專案。 第二個列舉的 設定true
為 UseResXDataNodes ,以便將資源數據元素當做 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
。