Sdílet prostřednictvím


ResXResourceReader.UseResXDataNodes Vlastnost

Definice

Získá nebo nastaví hodnotu, která určuje, zda ResXDataNode objekty jsou vráceny při čtení aktuálního souboru prostředků XML nebo datového proudu.

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

Hodnota vlastnosti

true pokud jsou načteny uzly dat prostředků; false pokud jsou uzly dat prostředků ignorovány.

Výjimky

V operaci sady je enumerátor pro soubor prostředků nebo datový proud již otevřen.

Příklady

Následující příklad vytvoří výčet a zobrazí položky prostředků v souboru XML. Zpočátku je nastavená tak, aby false zobrazovala jak data, UseResXDataNodes tak položky metadat, ke kterým dochází v souboru prostředků. Druhý výčet má nastavenou UseResXDataNodes hodnotu true tak, aby datové prvky prostředků byly vráceny jako ResXDataNode objekty.

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

Soubor XML prostředku používaný v příkladu obsahuje jeden datový uzel a jeden uzel metadat. Pokud chcete použít soubor XML s předchozím příkladem, zkopírujte následující text a uložte ho do souboru s názvem 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>

Poznámky

Vlastnost můžete nastavit UseResXDataNodes před zahájením vytváření výčtu prostředků. Ve výchozím nastavení je falsejeho hodnota .

Platí pro