ResourceReader Klasse

Definition

Listet die Ressourcen in einer binären Ressourcendatei (.resources) durch Lesen von sequenziellen Ressourcenname-/Wert-Paaren auf.

public ref class ResourceReader sealed : System::Resources::IResourceReader
public ref class ResourceReader sealed : IDisposable
public ref class ResourceReader sealed : IDisposable, System::Collections::IEnumerable, System::Resources::IResourceReader
public sealed class ResourceReader : System.Resources.IResourceReader
public sealed class ResourceReader : IDisposable
public sealed class ResourceReader : IDisposable, System.Collections.IEnumerable, System.Resources.IResourceReader
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ResourceReader : System.Resources.IResourceReader
type ResourceReader = class
    interface IEnumerable
    interface IDisposable
    interface IResourceReader
type ResourceReader = class
    interface IDisposable
type ResourceReader = class
    interface IResourceReader
    interface IEnumerable
    interface IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type ResourceReader = class
    interface IResourceReader
    interface IEnumerable
    interface IDisposable
Public NotInheritable Class ResourceReader
Implements IResourceReader
Public NotInheritable Class ResourceReader
Implements IDisposable
Public NotInheritable Class ResourceReader
Implements IDisposable, IEnumerable, IResourceReader
Vererbung
ResourceReader
Attribute
Implementiert

Hinweise

Wichtig

Das Aufrufen von Methoden aus dieser Klasse mit nicht vertrauenswürdigen Daten stellt ein Sicherheitsrisiko dar. Rufen Sie die Methoden aus dieser Klasse nur mit vertrauenswürdigen Daten auf. Weitere Informationen finden Sie unter "Alle Eingaben überprüfen".

Die ResourceReader Klasse stellt eine Standardimplementierung der IResourceReader Schnittstelle bereit. Eine ResourceReader Instanz stellt entweder eine eigenständige Ressourcendatei oder eine Ressourcendatei dar, die in eine Assembly eingebettet ist. Es wird verwendet, um die Ressourcen in einer Ressourcendatei aufzählen und seine Namen-/Wertpaare abzurufen. Es unterscheidet sich von der Klasse, die verwendet wird, um angegebene benannte Ressourcen aus einer Ressourcendatei abzurufen, die ResourceManager in eine Assembly eingebettet ist. Die ResourceManager Klasse wird verwendet, um Ressourcen abzurufen, deren Namen im Voraus bekannt sind, während die ResourceReader Klasse nützlich ist, um Ressourcen abzurufen, deren Zahl oder genaue Namen zur Kompilierungszeit nicht bekannt sind. Beispielsweise kann eine Anwendung eine Ressourcendatei verwenden, um Konfigurationsinformationen zu speichern, die in Abschnitte und Elemente in einem Abschnitt organisiert sind, wobei die Anzahl der Abschnitte oder Elemente in einem Abschnitt im Voraus nicht bekannt ist. Ressourcen können dann generische (zSection1. B. , , Section1Item1``Section1Item2usw.) benannt und mithilfe eines ResourceReader Objekts abgerufen werden.

Wichtig

Dieser Typ implementiert die IDisposable-Schnittstelle. Nach Abschluss der Verwendung sollten Sie den Typ entweder direkt oder indirekt löschen. Zum direkten Löschen des Typs rufen Sie seine Dispose-Methode in einem try/catch-Block auf. Zum indirekten Löschen verwenden Sie ein Sprachkonstrukt wie using (in C#) oder Using (in Visual Basic). Weitere Informationen finden Sie im Abschnitt „Verwenden eines Objekts, das IDisposable implementiert“ des Themas „Die IDisposable-Schnittstelle“.

Weitere Informationen zur Verwendung der ResourceReader Klasse finden Sie in den folgenden Abschnitten:

Instanziieren eines ResourceReader-Objekts

Eine Ressourcendatei ist eine binärdatei, die entweder aus einer Textdatei oder einer XML-RESX-Datei durch Resgen.exe (Resource File Generator) kompiliert wurde. Ein ResourceReader Objekt kann entweder eine eigenständige .resources-Datei oder eine Ressourcendatei darstellen, die in eine Assembly eingebettet wurde.

Um ein ResourceReader Objekt zu instanziieren, das aus einer eigenständigen Ressourcendatei liest, verwenden Sie den ResourceReader Klassenkonstruktor entweder mit einem Eingabestrom oder einer Zeichenfolge, die den Dateinamen der Ressourcen enthält. Im folgenden Beispiel werden beide Ansätze veranschaulicht. Das erste Instanziiert ein ResourceReader Objekt, das eine Ressourcendatei mit dem Resources1.resources Namen des Dateinamens darstellt. Der zweite Instanziiert ein ResourceReader Objekt, das eine Ressourcendatei mit dem Namen Resources2.resources eines Datenstroms darstellt, der aus der Datei erstellt wurde.

// Instantiate a standalone .resources file from its filename.
var rr1 = new System.Resources.ResourceReader("Resources1.resources");

// Instantiate a standalone .resources file from a stream.
var fs = new System.IO.FileStream(@".\Resources2.resources",
                                  System.IO.FileMode.Open);
var rr2 = new System.Resources.ResourceReader(fs);
' Instantiate a standalone .resources file from its filename.
Dim rr1 As New System.Resources.ResourceReader("Resources1.resources")

' Instantiate a standalone .resources file from a stream.
Dim fs As New System.IO.FileStream(".\Resources2.resources",
                                   System.IO.FileMode.Open)
Dim rr2 As New System.Resources.ResourceReader(fs)

Um ein Objekt zu erstellen, das eine eingebettete Ressourcendatei darstellt, instanziieren Sie ein ResourceReader Assembly Objekt aus der Assembly, in die die Ressourcendatei eingebettet ist. Die Assembly.GetManifestResourceStream Methode gibt ein Stream Objekt zurück, das an den ResourceReader(Stream) Konstruktor übergeben werden kann. Im folgenden Beispiel wird ein ResourceReader Objekt instanziiert, das eine eingebettete Ressourcendatei darstellt.

System.Reflection.Assembly assem = 
             System.Reflection.Assembly.LoadFrom(@".\MyLibrary.dll"); 
System.IO.Stream fs = 
             assem.GetManifestResourceStream("MyCompany.LibraryResources.resources");
var rr = new System.Resources.ResourceReader(fs);
Dim assem As System.Reflection.Assembly = 
             System.Reflection.Assembly.LoadFrom(".\MyLibrary.dll") 
Dim fs As System.IO.Stream = 
             assem.GetManifestResourceStream("MyCompany.LibraryResources.resources")
Dim rr As New System.Resources.ResourceReader(fs)

Aufzählen der Ressourcen eines ResourceReader-Objekts

Um die Ressourcen in einer Ressourcendatei aufzählen zu können, rufen Sie die Methode auf, die GetEnumerator ein System.Collections.IDictionaryEnumerator Objekt zurückgibt. Sie rufen die IDictionaryEnumerator.MoveNext Methode auf, um von einer Ressource zum nächsten zu wechseln. Die Methode gibt zurück false , wenn alle Ressourcen in der Ressourcendatei aufgezählt wurden.

Hinweis

Obwohl die ResourceReader Klasse die IEnumerable Schnittstelle und die IEnumerable.GetEnumerator Methode implementiert, stellt die ResourceReader.GetEnumerator Methode die IEnumerable.GetEnumerator Implementierung nicht bereit. Stattdessen gibt die ResourceReader.GetEnumerator Methode ein IDictionaryEnumerator Schnittstellenobjekt zurück, das Zugriff auf das Name-/Wertpaar der einzelnen Ressourcen bereitstellt.

Sie können die einzelnen Ressourcen in der Auflistung auf zwei Arten abrufen:

Abrufen von Ressourcen mithilfe von IDictionaryEnumerator-Eigenschaften

Die erste Methode zum Aufzählen der Ressourcen in einer Ressourcendatei umfasst das direkte Abrufen des Namens-/Wertpaars jeder Ressource. Nachdem Sie die IDictionaryEnumerator.MoveNext Methode aufgerufen haben, um zu jeder Ressource in der Auflistung zu wechseln, können Sie den Ressourcennamen aus der IDictionaryEnumerator.Key Eigenschaft und den Ressourcendaten aus der IDictionaryEnumerator.Value Eigenschaft abrufen.

Im folgenden Beispiel wird gezeigt, wie Sie den Namen und den Wert jeder Ressource in einer Ressourcendatei mithilfe der IDictionaryEnumerator.Key Eigenschaften IDictionaryEnumerator.Value abrufen. Um das Beispiel auszuführen, erstellen Sie die folgende Textdatei namens ApplicationResources.txt, um Zeichenfolgenressourcen zu definieren.

Title="Contact Information"  
Label1="First Name:"  
Label2="Middle Name:"  
Label3="Last Name:"  
Label4="SSN:"  
Label5="Street Address:"  
Label6="City:"  
Label7="State:"  
Label8="Zip Code:"  
Label9="Home Phone:"  
Label10="Business Phone:"  
Label11="Mobile Phone:"  
Label12="Other Phone:"  
Label13="Fax:"  
Label14="Email Address:"  
Label15="Alternate Email Address:"  

Anschließend können Sie die Textdatei in eine Binärdatei namens ApplicationResources.resources konvertieren, indem Sie den folgenden Befehl verwenden:

resgen ApplicationResources.txt

Im folgenden Beispiel wird dann die ResourceReader Klasse verwendet, um jede Ressource in der eigenständigen binären Ressourcendatei aufzählen und den Schlüsselnamen und den entsprechenden Wert anzuzeigen.

using System;
using System.Collections;
using System.Resources;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Resources in ApplicationResources.resources:");
      ResourceReader res = new ResourceReader(@".\ApplicationResources.resources");
      IDictionaryEnumerator dict = res.GetEnumerator();
      while (dict.MoveNext())
         Console.WriteLine("   {0}: '{1}' (Type {2})", 
                           dict.Key, dict.Value, dict.Value.GetType().Name);
      res.Close();
   }
}
// The example displays the following output:
//       Resources in ApplicationResources.resources:
//          Label3: '"Last Name:"' (Type String)
//          Label2: '"Middle Name:"' (Type String)
//          Label1: '"First Name:"' (Type String)
//          Label7: '"State:"' (Type String)
//          Label6: '"City:"' (Type String)
//          Label5: '"Street Address:"' (Type String)
//          Label4: '"SSN:"' (Type String)
//          Label9: '"Home Phone:"' (Type String)
//          Label8: '"Zip Code:"' (Type String)
//          Title: '"Contact Information"' (Type String)
//          Label12: '"Other Phone:"' (Type String)
//          Label13: '"Fax:"' (Type String)
//          Label10: '"Business Phone:"' (Type String)
//          Label11: '"Mobile Phone:"' (Type String)
//          Label14: '"Email Address:"' (Type String)
//          Label15: '"Alternate Email Address:"' (Type String)
Imports System.Collections
Imports System.Resources

Module Example
   Public Sub Main()
      Console.WriteLine("Resources in ApplicationResources.resources:")
      Dim res As New ResourceReader(".\ApplicationResources.resources")
      Dim dict As IDictionaryEnumerator = res.GetEnumerator()
      Do While dict.MoveNext()
         Console.WriteLine("   {0}: '{1}' (Type {2})", dict.Key, dict.Value, dict.Value.GetType().Name)
      Loop
      res.Close()
   End Sub
End Module
' The example displays output like the following:
'       Resources in ApplicationResources.resources:
'          Label3: '"Last Name:"' (Type String)
'          Label2: '"Middle Name:"' (Type String)
'          Label1: '"First Name:"' (Type String)
'          Label7: '"State:"' (Type String)
'          Label6: '"City:"' (Type String)
'          Label5: '"Street Address:"' (Type String)
'          Label4: '"SSN:"' (Type String)
'          Label9: '"Home Phone:"' (Type String)
'          Label8: '"Zip Code:"' (Type String)
'          Title: '"Contact Information"' (Type String)
'          Label12: '"Other Phone:"' (Type String)
'          Label13: '"Fax:"' (Type String)
'          Label10: '"Business Phone:"' (Type String)
'          Label11: '"Mobile Phone:"' (Type String)
'          Label14: '"Email Address:"' (Type String)
'          Label15: '"Alternate Email Address:"' (Type String)

Der Versuch, Ressourcendaten aus der IDictionaryEnumerator.Value Eigenschaft abzurufen, kann die folgenden Ausnahmen auslösen:

  • Wenn FormatException sich die Daten nicht im erwarteten Format befindet.

  • Wenn FileNotFoundException die Assembly, die den Typ enthält, zu dem die Daten gehören, nicht gefunden werden kann.

  • Wenn TypeLoadException der Typ, zu dem die Daten gehören, nicht gefunden werden kann.

In der Regel werden diese Ausnahmen ausgelöst, wenn die Ressourcendatei manuell geändert wurde, wenn die Assembly, in der ein Typ definiert wird, entweder nicht mit einer Anwendung enthalten ist oder nicht versehentlich gelöscht wurde, oder wenn die Assembly eine ältere Version ist, die einen Typ vorgibt. Wenn eine dieser Ausnahmen ausgelöst wird, können Sie Ressourcen abrufen, indem Sie jede Ressource aufzählen und die GetResourceData Methode aufrufen, wie im folgenden Abschnitt dargestellt. Dieser Ansatz bietet Ihnen einige Informationen zum Datentyp, den die IDictionaryEnumerator.Value Eigenschaft zurückgegeben hat.

Abrufen von Ressourcen nach Name mit GetResourceData

Der zweite Ansatz zum Aufzählen von Ressourcen in einer Ressourcendatei umfasst auch das Navigieren durch die Ressourcen in der Datei durch Aufrufen der IDictionaryEnumerator.MoveNext Methode. Für jede Ressource rufen Sie den Namen der Ressource aus der Eigenschaft ab, die dann an die Methode übergeben wird, um die Daten der IDictionaryEnumerator.Key GetResourceData(String, String, Byte[]) Ressource abzurufen. Dies wird als Bytearray im resourceData Argument zurückgegeben.

Dieser Ansatz ist besser als das Abrufen des Ressourcennamens und des Werts aus den IDictionaryEnumerator.Key und IDictionaryEnumerator.Value den Eigenschaften, da er die tatsächlichen Bytes zurückgibt, die den Ressourcenwert bilden. Wenn der Versuch, die Ressource abzurufen, jedoch eine Ausnahme auslöst, kann die GetResourceData Methode die Quelle der Ausnahme identifizieren, indem Informationen zum Datentyp der Ressource bereitgestellt werden. Weitere Informationen zu der Zeichenfolge, die den Datentyp der Ressource angibt, finden Sie unter GetResourceData.

Im folgenden Beispiel wird veranschaulicht, wie Sie diesen Ansatz zum Abrufen von Ressourcen und zum Behandeln von Ausnahmen verwenden, die ausgelöst werden. Es erstellt programmgesteuert eine binäre Ressourcendatei, die vier Zeichenfolgen, einen Boolean, eine ganze Zahl, eine Bitmap und ein benutzerdefiniertes DateTimeTZI Objekt enthält. Führen Sie zum Ausführen des Beispiels folgendes aus:

  1. Erstellen Sie eine Assembly namens Library.dll, die die DateTimeTZI Struktur enthält. Im Folgenden handelt es sich um den Quellcode für die Assembly.

    using System;
    
    [Serializable] public struct DateTimeTZI
    {
      DateTime Date;
      TimeZoneInfo TimeZone;
       
      public DateTimeTZI(DateTime date, TimeZoneInfo tz)
      {
         this.Date = date;
         this.TimeZone = tz;
      }
    
       public override string ToString()
       {
         return String.Format("{0:dd/MM/yyyy hh:mm:ss tt} {1}", 
                              Date, TimeZone.StandardName);
       }
    }
    
    <Serializable> Public Structure DateTimeTZI
      Dim [Date] As DateTime
      Dim TimeZone As TimeZoneInfo
       
      Public Sub New([date] As DateTime, tz As TimeZoneInfo)
         Me.[Date] = [date]
         Me.TimeZone = tz
      End Sub
      
      Public Overrides Function ToString() As String
         Return String.Format("{0:dd/MM/yyyy hh:mm:ss tt} {1}", 
                              [Date], TimeZone.StandardName)
      End Function
    End Structure
    

    Kompilieren Sie den Quellcode in C# mithilfe des folgenden Befehls:

    csc /t:library library.cs  
    

    Sie können sie auch in Visual Basic kompilieren, indem Sie den folgenden Befehl verwenden:

    vbc library.vb /t:library  
    
  2. Kompilieren und Ausführen des folgenden Quellcodes, der eine Ressourcendatei namens ContactResources.resources erstellt.

    using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Resources;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          // Bitmap as stream.
          MemoryStream bitmapStream = new MemoryStream();
          Bitmap bmp = new Bitmap(@".\ContactsIcon.jpg");
          bmp.Save(bitmapStream, ImageFormat.Jpeg);
              
          // Define resources to be written.
          using (ResourceWriter rw = new ResourceWriter(@".\ContactResources.resources"))
          {
             rw.AddResource("Title", "Contact List");
             rw.AddResource("NColumns", 5);         
             rw.AddResource("Icon", bitmapStream);         
             rw.AddResource("Header1", "Name");
             rw.AddResource("Header2", "City");
             rw.AddResource("Header3", "State");  
             rw.AddResource("VersionDate", new DateTimeTZI(
                            new DateTime(2012, 5, 18),  
                            TimeZoneInfo.Local));
             rw.AddResource("ClientVersion", true);
             rw.Generate();
          }
       }
    }
    
    Imports System.Drawing
    Imports System.IO
    Imports System.Resources
    Imports System.Runtime.Serialization.Formatters.Binary
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          ' Bitmap as stream.
          Dim bitmapStream As New MemoryStream()
          Dim bmp As New Bitmap(".\ContactsIcon.jpg")
          bmp.Save(bitmapStream, Imaging.ImageFormat.jpeg)
              
          ' Define resources to be written.
          Using rw As New ResourceWriter(".\ContactResources.resources")
             rw.AddResource("Title", "Contact List")
             rw.AddResource("NColumns", 5)         
             rw.AddResource("Icon", bitmapStream)         
             rw.AddResource("Header1", "Name")
             rw.AddResource("Header2", "City")
             rw.AddResource("Header3", "State")  
             rw.AddResource("VersionDate", New DateTimeTZI(#05/18/2012#, 
                                                           TimeZoneInfo.Local))
             rw.AddResource("ClientVersion", True)
             rw.Generate()
          End Using
       End Sub
    End Module
    

    Die Quellcodedatei wird "CreateResources.cs" genannt. Sie können es in C# mithilfe des folgenden Befehls kompilieren:

    csc CreateResources.cs /r:library.dll  
    

    Sie können sie auch in Visual Basic kompilieren, indem Sie den folgenden Befehl verwenden:

    vbc CreateResources.vb /r:library.dll  
    
  3. Kompilieren Sie den folgenden Code, um die Ressourcen in der Datei "ContactResources.resources" aufzählen zu können.

    using System;
    using System.Collections;
    using System.Drawing;
    using System.IO;
    using System.Resources;
    using System.Runtime.Serialization.Formatters.Binary;
    
    public class Example
    {
       public static void Main()
       {
          ResourceReader rdr = new ResourceReader(@".\ContactResources.resources");  
          IDictionaryEnumerator dict = rdr.GetEnumerator();
          while (dict.MoveNext()) {
             Console.WriteLine("Resource Name: {0}", dict.Key);
             try {
                Console.WriteLine("   Value: {0}", dict.Value);
             }
             catch (FileNotFoundException) {
                Console.WriteLine("   Exception: A file cannot be found.");
                DisplayResourceInfo(rdr, (string) dict.Key, false);
             }
             catch (FormatException) {
                Console.WriteLine("   Exception: Corrupted data.");
                DisplayResourceInfo(rdr, (string) dict.Key, true);
             }
             catch (TypeLoadException) {
                Console.WriteLine("   Exception: Cannot load the data type.");
                DisplayResourceInfo(rdr, (string) dict.Key, false);   
             }
          } 
       }
    
       private static void DisplayResourceInfo(ResourceReader rr, 
                                       string key, bool loaded)
       {                                
          string dataType = null;
          byte[] data = null;
          rr.GetResourceData(key, out dataType, out data);
                
          // Display the data type.
          Console.WriteLine("   Data Type: {0}", dataType);
          // Display the bytes that form the available data.      
          Console.Write("   Data: ");
          int lines = 0;
          foreach (var dataItem in data) {
             lines++;
             Console.Write("{0:X2} ", dataItem);
             if (lines % 25 == 0)
                Console.Write("\n         ");
          }
          Console.WriteLine();
          // Try to recreate current state of  data.
          // Do: Bitmap, DateTimeTZI
          switch (dataType) 
          {  
             // Handle internally serialized string data (ResourceTypeCode members).
             case "ResourceTypeCode.String":
                BinaryReader reader = new BinaryReader(new MemoryStream(data));
                string binData = reader.ReadString();
                Console.WriteLine("   Recreated Value: {0}", binData);
                break;
             case "ResourceTypeCode.Int32":
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToInt32(data, 0));
                break;
             case "ResourceTypeCode.Boolean":
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToBoolean(data, 0));
                break;
             // .jpeg image stored as a stream.
             case "ResourceTypeCode.Stream":  
                const int OFFSET = 4;
                int size = BitConverter.ToInt32(data, 0);
                Bitmap value1 = new Bitmap(new MemoryStream(data, OFFSET, size));
                Console.WriteLine("   Recreated Value: {0}", value1); 
                break;
             // Our only other type is DateTimeTZI.
             default:
                // No point in deserializing data if the type is unavailable.
                if (dataType.Contains("DateTimeTZI") && loaded) { 
                   BinaryFormatter binFmt = new BinaryFormatter();
                   object value2 = binFmt.Deserialize(new MemoryStream(data));
                   Console.WriteLine("   Recreated Value: {0}", value2);
                }    
                break;
          }
          Console.WriteLine();
       }
    }
    
    Imports System.Collections
    Imports System.Drawing
    Imports System.IO
    Imports System.Resources
    Imports System.Runtime.Serialization.Formatters.Binary
    
    Module Example
       Public Sub Main()
          Dim rdr As New ResourceReader(".\ContactResources.resources")  
          Dim dict As IDictionaryEnumerator = rdr.GetEnumerator()
          Do While dict.MoveNext()
             Console.WriteLine("Resource Name: {0}", dict.Key)
             Try
                Console.WriteLine("   Value: {0}", dict.Value)
             Catch e As FileNotFoundException
                Console.WriteLine("   Exception: A file cannot be found.")
                DisplayResourceInfo(rdr, CStr(dict.Key), False)
             Catch e As FormatException
                Console.WriteLine("   Exception: Corrupted data.")
                DisplayResourceInfo(rdr, CStr(dict.Key), True)
             Catch e As TypeLoadException
                Console.WriteLine("   Exception: Cannot load the data type.")
                DisplayResourceInfo(rdr, CStr(dict.Key), False)   
             End Try
          Loop 
       End Sub
    
       Private Sub DisplayResourceInfo(rr As ResourceReader, 
                                       key As String, loaded As Boolean)
          Dim dataType As String = Nothing
          Dim data() As Byte = Nothing
          rr.GetResourceData(key, dataType, data)
                
          ' Display the data type.
          Console.WriteLine("   Data Type: {0}", dataType)
          ' Display the bytes that form the available data.      
          Console.Write("   Data: ")
          Dim lines As Integer = 0
          For Each dataItem In data
             lines += 1
             Console.Write("{0:X2} ", dataItem)
             If lines Mod 25 = 0 Then Console.Write("{0}         ", vbCrLf)
          Next
          Console.WriteLine()
          ' Try to recreate current state of  data.
          ' Do: Bitmap, DateTimeTZI
          Select Case dataType   
             ' Handle internally serialized string data (ResourceTypeCode members).
             Case "ResourceTypeCode.String"
                Dim reader As New BinaryReader(New MemoryStream(data))
                Dim binData As String = reader.ReadString()
                Console.WriteLine("   Recreated Value: {0}", binData)
             Case "ResourceTypeCode.Int32"
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToInt32(data, 0))
             Case "ResourceTypeCode.Boolean"
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToBoolean(data, 0))
             ' .jpeg image stored as a stream.
             Case "ResourceTypeCode.Stream"  
                Const OFFSET As Integer = 4
                Dim size As Integer = BitConverter.ToInt32(data, 0)
                Dim value As New Bitmap(New MemoryStream(data, OFFSET, size))
                Console.WriteLine("   Recreated Value: {0}", value) 
             ' Our only other type is DateTimeTZI.
             Case Else
                ' No point in deserializing data if the type is unavailable.
                If dataType.Contains("DateTimeTZI") And loaded Then 
                   Dim binFmt As New BinaryFormatter()
                   Dim value As Object = binFmt.Deserialize(New MemoryStream(data))
                   Console.WriteLine("   Recreated Value: {0}", value)
                End If    
          End Select
          Console.WriteLine()
       End Sub
    End Module
    

    Nach dem Ändern des Quellcodes (z. B. durch absichtliches Auslösen eines FormatException Am Endes des try Blockes) oder Umbenennen der Library.dll Assembly, damit sie zur Laufzeit nicht verfügbar ist, können Sie das Beispiel ausführen, um zu sehen, wie GetResourceData Aufrufe einige Ressourceninformationen abrufen oder neu erstellen können.

Konstruktoren

ResourceReader(Stream)

Initialisiert eine neue Instanz der ResourceReader-Klasse für den angegebenen Stream.

ResourceReader(String)

Initialisiert eine neue Instanz der ResourceReader-Klasse für die angegebene benannten Ressourcendatei.

Methoden

Close()

Gibt alle diesem ResourceReader-Objekt zugeordneten Ressourcen des Betriebssystems frei.

Dispose()

Gibt alle von der aktuellen Instanz der ResourceReader-Klasse verwendeten Ressourcen frei.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetEnumerator()

Gibt einen Enumerator für dieses ResourceReader-Objekt zurück.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetResourceData(String, String, Byte[])

Ruft den Typnamen und die Daten einer benannten Ressource aus einer geöffneten Ressourcendatei oder einem geöffneten Datenstrom ab.

GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IDisposable.Dispose()

Gibt die von der ResourceReader verwendeten Ressourcen frei.

IEnumerable.GetEnumerator()

Gibt einen Enumerator für dieses ResourceReader-Objekt zurück.

Erweiterungsmethoden

Cast<TResult>(IEnumerable)

Wandelt die Elemente eines IEnumerable in den angegebenen Typ um

OfType<TResult>(IEnumerable)

Filtert die Elemente eines IEnumerable anhand eines angegebenen Typs

AsParallel(IEnumerable)

Ermöglicht die Parallelisierung einer Abfrage.

AsQueryable(IEnumerable)

Konvertiert einen IEnumerable in einen IQueryable.

Gilt für: