Tupel (Visual Basic)Tuples (Visual Basic)

Ab Visual Basic 2017 bietet die Visual Basic Sprache integrierte Unterstützung für Tupel, die das Erstellen von Tupeln und den Zugriff auf die Elemente von Tupeln vereinfachen.Starting with Visual Basic 2017, the Visual Basic language offers built-in support for tuples that makes creating tuples and accessing the elements of tuples easier. Ein Tupel ist eine vereinfachte Datenstruktur, die über eine bestimmte Anzahl und Sequenz von Werten verfügt.A tuple is a lightweight data structure that has a specific number and sequence of values. Wenn Sie das Tupel instanziieren, definieren Sie die Zahl und den Datentyp der einzelnen Werte (oder Elemente).When you instantiate the tuple, you define the number and the data type of each value (or element). Ein 2-Tupel (oder-Paar) verfügt beispielsweise über zwei-Elemente.For example, a 2-tuple (or pair) has two elements. Der erste Wert ist möglicherweise ein Boolean Wert, während der zweite ein String ist.The first might be a Boolean value, while the second is a String. Da Tupel die Speicherung mehrerer Werte in einem einzelnen Objekt vereinfachen, werden diese häufig als einfache Methode zum Zurückgeben mehrerer Werte aus einer Methode verwendet.Because tuples make it easy to store multiple values in a single object, they are often used as a lightweight way to return multiple values from a method.

Wichtig

Unterstützung für Tupel erfordert den ValueTuple Typ.Tuple support requires the ValueTuple type. Wenn die .NET Framework 4,7 nicht installiert ist, müssen Sie das nuget-Paket System.ValueTuple hinzufügen, das im nuget-Katalog verfügbar ist.If the .NET Framework 4.7 is not installed, you must add the NuGet package System.ValueTuple, which is available on the NuGet Gallery. Ohne dieses Paket erhalten Sie möglicherweise einen Kompilierungsfehler ähnlich dem folgenden: "der vordefinierte Typ" valuetuple (of,,,) "ist nicht definiert oder importiert."Without this package, you may get a compilation error similar to, "Predefined type 'ValueTuple(Of,,,)' is not defined or imported."

Instanziieren und Verwenden eines TupelsInstantiating and using a tuple

Sie instanziieren ein Tupel durch das Einschließen der durch Trennzeichen getrennten Werte in Klammern.You instantiate a tuple by enclosing its comma-delimited values im parentheses. Jeder dieser Werte wird dann zu einem Feld des Tupels.Each of those values then becomes a field of the tuple. Im folgenden Code wird z. b. ein Triple (oder ein 3-Tupel) mit einem Date als ersten Wert definiert, ein String als zweiter Wert und ein Boolean als Dritter.For example, the following code defines a triple (or 3-tuple) with a Date as its first value, a String as its second, and a Boolean as its third.

Dim holiday = (#07/04/2017#, "Independence Day", True)

Standardmäßig besteht der Name jedes Felds in einem Tupel aus der Zeichenfolge Item zusammen mit der einbasierten Position des Felds im Tupel.By default, the name of each field in a tuple consists of the string Item along with the field's one-based position in the tuple. Bei diesem 3-Tupel ist das Date Feld Item1, das Feld String Item2, und das Boolean Feld ist Item3.For this 3-tuple, the Date field is Item1, the String field is Item2, and the Boolean field is Item3. Im folgenden Beispiel werden die Werte der Felder des Tupels angezeigt, die in der vorherigen Codezeile instanziiert wurden.The following example displays the values of fields of the tuple instantiated in the previous line of code

Console.WriteLine($"{holiday.Item1} is {holiday.Item2}" +
                  $"{If(holiday.Item3, ", a national holiday", String.Empty)}")
' Output: 7/4/2017 12:00:00 AM Is Independence Day, a national holiday

Die Felder eines Visual Basic Tupels sind Lese-/Schreibzugriff. Nachdem Sie ein Tupel instanziiert haben, können Sie seine Werte ändern.The fields of a Visual Basic tuple are read-write; after you've instantiated a tuple, you can modify its values. Im folgenden Beispiel werden zwei der drei Felder des Tupels geändert, das im vorherigen Beispiel erstellt wurde, und das Ergebnis wird angezeigt.The following example modifies two of the three fields of the tuple created in the previous example and displays the result.

holiday.Item1 = #01/01/2018#
holiday.Item2 = "New Year's Day"
Console.WriteLine($"{holiday.Item1} is {holiday.Item2}" +
                  $"{If(holiday.Item3, ", a national holiday", String.Empty)}")
' Output: 1/1/2018 12:00:00 AM Is New Year's Day, a national holiday

Instanziieren und Verwenden eines benannten TupelsInstantiating and using a named tuple

Anstatt Standardnamen für die Felder eines Tupels zu verwenden, können Sie ein benanntes Tupel instanziieren, indem Sie den Elementen des Tupels eigene Namen zuweisen.Rather than using default names for a tuple's fields, you can instantiate a named tuple by assigning your own names to the tuple's elements. Auf die Felder des Tupels kann dann über ihre zugewiesenen Namen oder über deren Standardnamen zugegriffen werden.The tuple's fields can then be accessed by their assigned names or by their default names. Im folgenden Beispiel wird das gleiche 3-Tupel wie zuvor instanziiert, mit der Ausnahme, dass es explizit das erste Feld EventDate, den zweiten Name und den dritten IsHoliday benennt.The following example instantiates the same 3-tuple as previously, except that it explicitly names the first field EventDate, the second Name, and the third IsHoliday. Anschließend werden die Feldwerte angezeigt, Sie werden geändert, und die Feldwerte werden erneut angezeigt.It then displays the field values, modifies them, and displays the field values again.

Dim holiday = (EventDate:=#07/04/2017#, Name:="Independence Day", IsHoliday:=True)
Console.WriteLine($"{holiday.EventDate} Is {holiday.Name}" +
                  $"{If(holiday.IsHoliday, ", a national holiday", String.Empty)}")
holiday.Item1 = #01/01/2018#
holiday.Item2 = "New Year's Day"
Console.WriteLine($"{holiday.Item1} is {holiday.Item2}" +
                  $"{If(holiday.Item3, ", a national holiday", String.Empty)}")
' The example displays the following output:
'   7/4/2017 12:00:00 AM Is Independence Day, a national holiday
'   1/1/2018 12:00:00 AM Is New Year's Day, a national holiday

Abgeleitete TupelelementnamenInferred tuple element names

Ab Visual Basic 15,3 können Visual Basic die Namen der Tupelelemente ableiten. Sie müssen Sie nicht explizit zuweisen.Starting with Visual Basic 15.3, Visual Basic can infer the names of tuple elements; you do not have to assign them explicitly. Abherzustellende tupelnamen sind hilfreich, wenn Sie ein Tupel aus einem Satz von Variablen initialisieren und der tupelelementname dem Variablennamen entsprechen soll.Inferred tuple names are useful when you initialize a tuple from a set of variables, and you want the tuple element name to be the same as the variable name.

Im folgenden Beispiel wird ein stateInfo Tupel erstellt, das drei explizit benannte Elemente, state, stateName und capital enthält.The following example creates a stateInfo tuple that contains three explicitly named elements, state, stateName, and capital. Beachten Sie, dass die tupelinitialisierungs-Anweisung beim Benennen der Elemente einfach die benannten Elemente den Werten der identisch benannten Variablen zuweist.Note that, in naming the elements, the tuple initialization statement simply assigns the named elements the values of the identically named variables.

Const state As String = "MI"
Const stateName As String = "Michigan"
Const capital As String = "Lansing"
Dim stateInfo = (state:=state, stateName:=stateName, capital:=capital)
Console.WriteLine($"{stateInfo.stateName}: 2-letter code: {stateInfo.state}, Capital {stateInfo.capital}")
' The example displays the following output:
'      Michigan: 2-letter code: MI, Capital Lansing

Da Elemente und Variablen denselben Namen haben, kann der Visual Basic Compiler die Namen der Felder ableiten, wie im folgenden Beispiel gezeigt.Because elements and variables have the same name, the Visual Basic compiler can infer the names of the fields, as the following example shows.

Const state As String = "MI"
Const stateName As String = "Michigan"
Const capital As String = "Lansing"
Dim stateInfo = ( state, stateName, capital )
Console.WriteLine($"{stateInfo.stateName}: 2-letter code: {stateInfo.State}, Capital {stateInfo.capital}")   
' The example displays the following output:
'      Michigan: 2-letter code: MI, Capital Lansing

Sie müssen die Version der Visual Basic-compilerin definieren, die in der Visual Basic Project-Datei (*. vbproj) verwendet werden soll, um herabherzuordnenden tupelelementnamen zu aktivieren:To enable inferred tuple element names, you must define the version of the Visual Basic compiler to use in your Visual Basic project (*.vbproj) file:

<PropertyGroup>
  <LangVersion>15.3</LangVersion>
</PropertyGroup>

Die Versionsnummer kann eine beliebige Version des Visual Basic Compilers sein, beginnend mit 15,3.The version number can be any version of the Visual Basic compiler starting with 15.3. Anstatt eine bestimmte Compilerversion hart zu codieren, können Sie auch "Latest" als Wert von LangVersion angeben, der mit der neuesten Version des Visual Basic Compilers kompiliert werden soll, die auf Ihrem System installiert ist.Rather than hard-coding a specific compiler version, you can also specify "Latest" as the value of LangVersion to compile with the most recent version of the Visual Basic compiler installed on your system.

Weitere Informationen finden Sie unter Festlegen der Visual Basic Sprachversion.For more information, see setting the Visual Basic language version.

In einigen Fällen kann der Visual Basic-Compiler den tupelelementnamen nicht aus dem Kandidaten Namen ableiten, und auf das tupelfeld kann nur mithilfe seines Standard namens verwiesen werden, z. b. Item1, Item2 usw. Hierzu gehören:In some cases, the Visual Basic compiler cannot infer the tuple element name from the candidate name, and the tuple field can only be referenced using its default name, such as Item1, Item2, etc. These include:

  • Der Kandidaten Name ist identisch mit dem Namen eines tupelmembers, z. b. Item3, Rest oder ToString.The candidate name is the same as the name of a tuple member, such as Item3, Rest, or ToString.

  • Der Kandidaten Name wird im Tupel dupliziert.The candidate name is duplicated in the tuple.

Wenn der Rückschluss von Feld Namen fehlschlägt, generiert Visual Basic weder einen Compilerfehler noch eine Ausnahme, die zur Laufzeit ausgelöst wird.When field name inference fails, Visual Basic does not generate a compiler error, nor is an exception thrown at runtime. Stattdessen müssen auf tupelfelder durch ihre vordefinierten Namen verwiesen werden, z. b. Item1 und Item2.Instead, tuple fields must be referenced by their predefined names, such as Item1 and Item2.

Tupel im Vergleich zu StrukturenTuples versus structures

Ein Visual Basic Tupel ist ein Werttyp, bei dem es sich um eine Instanz eines der generischen System. valuetuple -Typen handelt.A Visual Basic tuple is a value type that is an instance of one of the a System.ValueTuple generic types. Beispielsweise ist das holiday Tupel, das im vorherigen Beispiel definiert wurde, eine Instanz der ValueTuple<T1,T2,T3> Struktur.For example, the holiday tuple defined in the previous example is an instance of the ValueTuple<T1,T2,T3> structure. Es ist als Lightweight-Container für Daten konzipiert.It is designed to be a lightweight container for data. Da das Tupel darauf abzielt, ein Objekt mit mehreren Datenelementen zu erstellen, fehlen einige der Features, die eine benutzerdefinierte Struktur aufweisen kann.Since the tuple aims to make it easy to create an object with multiple data items, it lacks some of the features that a custom structure might have. Dazu gehören:These include:

  • Benutzerdefinierte Member.Custom members. Sie können keine eigenen Eigenschaften, Methoden oder Ereignisse für ein Tupel definieren.You cannot define your own properties, methods, or events for a tuple.

  • Validierungs.Validation. Die den Feldern zugewiesenen Daten können nicht überprüft werden.You cannot validate the data assigned to fields.

  • Unveränderlichkeit.Immutability. Visual Basic Tupel sind änderbar.Visual Basic tuples are mutable. Im Gegensatz dazu können Sie mit einer benutzerdefinierten Struktur steuern, ob eine Instanz änderbar oder unveränderlich ist.In contrast, a custom structure allows you to control whether an instance is mutable or immutable.

Wenn benutzerdefinierte Member, die Validierung von Eigenschaften und Feldern oder Unveränderlichkeit wichtig sind, sollten Sie die Visual Basic Structure -Anweisung verwenden, um einen benutzerdefinierten Werttyp zu definieren.If custom members, property and field validation, or immutability are important, you should use the Visual Basic Structure statement to define a custom value type.

Ein Visual Basic Tupel erbt die Member seines valuetuple -Typs.A Visual Basic tuple does inherit the members of its ValueTuple type. Zusätzlich zu den zugehörigen Feldern umfassen diese die folgenden Methoden:In addition to its fields, these include the following methods:

MemberMember BeschreibungDescription
CompareToCompareTo Vergleicht das aktuelle Tupel mit einem anderen Tupel mit der gleichen Anzahl von Elementen.Compares the current tuple to another tuple with the same number of elements.
gleichEquals Bestimmt, ob das aktuelle Tupel einem anderen Tupel oder Objekt entspricht.Determines whether the current tuple is equal to another tuple or object.
GetHashCodeGetHashCode Berechnet den Hashcode für die aktuelle Instanz.Calculates the hash code for the current instance.
ToStringToString Gibt die Zeichen folgen Darstellung dieses Tupels zurück, die das Formular (Item1, Item2...) annimmt, wobei Item1 und Item2 die Werte der Felder des Tupels darstellen.Returns the string representation of this tuple, which takes the form (Item1, Item2...), where Item1 and Item2 represent the values of the tuple's fields.

Außerdem implementieren die valuetuple -Typen IStructuralComparable und IStructuralEquatable Schnittstellen, die es Ihnen ermöglichen, Kunden Vergleiche zu definieren.In addition, the ValueTuple types implement IStructuralComparable and IStructuralEquatable interfaces, which allow you to define customer comparers.

Zuweisung und TupelAssignment and tuples

Visual Basic unterstützt die Zuweisung zwischen Tupeltypen, die über die gleiche Anzahl von Feldern verfügen.Visual Basic supports assignment between tuple types that have the same number of fields. Die Feldtypen können konvertiert werden, wenn eine der folgenden Punkte zutrifft:The field types can be converted if one of the following is true:

  • Das Quell-und Zielfeld weisen denselben Typ auf.The source and target field are of the same type.

  • Eine erweiternde (oder implizite) Konvertierung des Quell Typs in den Zieltyp ist definiert.A widening (or implicit) conversion of the source type to the target type is defined.

  • Option Strict ist On, und eine einschränkende (oder explizite) Konvertierung des Quell Typs in den Zieltyp ist definiert.Option Strict is On, and a narrowing (or explicit) conversion of the source type to the target type is defined. Diese Konvertierung kann eine Ausnahme auslösen, wenn der Quellwert außerhalb des Bereichs des Zieltyps liegt.This conversion can throw an exception if the source value is outside the range of the target type.

Andere Konvertierungen gelten nicht für Zuordnungen.Other conversions are not considered for assignments. Sehen wir uns die Arten von Zuweisungen an, die zwischen Tupeltypen zulässig sind.Let's look at the kinds of assignments that are allowed between tuple types.

Berücksichtigen Sie diese Variablen, die in den folgenden Beispielen verwendet werden:Consider these variables used in the following examples:

' The number and field types of all these tuples are compatible. 
' The only difference Is the field names being used.
Dim unnamed = (42, "The meaning of life")
Dim anonymous = (16, "a perfect square")
Dim named = (Answer:=42, Message:="The meaning of life")
Dim differentNamed = (SecretConstant:=42, Label:="The meaning of life")

Die ersten beiden Variablen, unnamed und anonymous, haben keine semantischen Namen für die Felder bereitgestellt.The first two variables, unnamed and anonymous, do not have semantic names provided for the fields. Die Feldnamen sind die Standard Item1 und Item2.Their field names are the default Item1 and Item2. Die letzten beiden Variablen, named und differentName haben semantische Feldnamen.The last two variables, named and differentName have semantic field names. Beachten Sie, dass diese zwei Tupel unterschiedliche Namen für die Felder besitzen.Note that these two tuples have different names for the fields.

Alle vier dieser Tupel haben die gleiche Anzahl von Feldern (als "Stelligkeit" bezeichnet), und die Typen dieser Felder sind identisch.All four of these tuples have the same number of fields (referred to as 'arity'), and the types of those fields are identical. Daher funktionieren alle Zuweisungen:Therefore, all of these assignments work:

' Assign named to unnamed.
named = unnamed

' Despite the assignment, named still has fields that can be referred to as 'answer' and 'message'.
Console.WriteLine($"{named.Answer}, {named.Message}")
' Output:  42, The meaning of life

' Assign unnamed to anonymous.
anonymous = unnamed
' Because of the assignment, the value of the elements of anonymous changed.
Console.WriteLine($"{anonymous.Item1}, {anonymous.Item2}")
' Output:   42, The meaning of life

' Assign one named tuple to the other.
named = differentNamed
' The field names are Not assigned. 'named' still has 'answer' and 'message' fields.
Console.WriteLine($"{named.Answer}, {named.Message}")
' Output:   42, The meaning of life

Beachten Sie, dass die Namen der Tupel nicht zugewiesen sind.Notice that the names of the tuples are not assigned. Die Werte der Felder werden nach der Reihenfolge der Felder im Tupel zugewiesen.The values of the fields are assigned following the order of the fields in the tuple.

Beachten Sie schließlich, dass wir das named Tupel dem conversion Tupel zuweisen können, obwohl das erste Feld von named ein Integer ist und das erste Feld von conversion ein Long ist.Finally, notice that we can assign the named tuple to the conversion tuple, even though the first field of named is an Integer, and the first field of conversion is a Long. Diese Zuweisung ist erfolgreich, da das Konvertieren einer Integer in eine Long eine erweiternde Konvertierung ist.This assignment succeeds because converting an Integer to a Long is a widening conversion.

' Assign an (Integer, String) tuple to a (Long, String) tuple (using implicit conversion).
Dim conversion As (Long, String) = named
Console.WriteLine($"{conversion.Item1} ({conversion.Item1.GetType().Name}), " +
                  $"{conversion.Item2} ({conversion.Item2.GetType().Name})")
' Output:      42 (Int64), The meaning of life (String)

Tupel mit unterschiedlicher Anzahl von Feldern können nicht zugewiesen werden:Tuples with different numbers of fields are not assignable:

' Does not compile.
' VB30311: Value of type '(Integer, Integer, Integer)' cannot be converted
'          to '(Answer As Integer, Message As String)'
var differentShape = (1, 2, 3)
named = differentShape

Tupel als MethodenrückgabewertTuples as method return values

Eine Methode kann nur einen einzelnen Wert zurückgeben.A method can return only a single value. Häufig ist es jedoch ein Methoden aufzurufen, mehrere Werte zurückzugeben.Frequently, though, you'd like a method call to return multiple values. Es gibt mehrere Möglichkeiten, diese Einschränkung zu umgehen:There are several ways to work around this limitation:

  • Sie können eine benutzerdefinierte Klasse oder Struktur erstellen, deren Eigenschaften oder Felder Werte darstellen, die von der-Methode zurückgegeben werden.You can create a custom class or structure whose properties or fields represent values returned by the method. Daher ist eine Lösung mit Schwergewicht. Es erfordert, dass Sie einen benutzerdefinierten Typ definieren, dessen einziger Zweck das Abrufen von Werten aus einem Methoden aufzurufen ist.Thus is a heavyweight solution; it requires that you define a custom type whose only purpose is to retrieve values from a method call.

  • Sie können einen einzelnen Wert aus der-Methode zurückgeben und die verbleibenden Werte zurückgeben, indem Sie Sie als Verweis an die-Methode übergeben.You can return a single value from the method, and return the remaining values by passing them by reference to the method. Dies umfasst den mehr Aufwand für die Instanziierung einer Variablen und die Risiken, die versehentlich den Wert der Variablen überschreiben, die Sie als Verweis übergeben.This involves the overhead of instantiating a variable and risks inadvertently overwriting the value of the variable that you pass by reference.

  • Sie können ein Tupel verwenden, das eine Lightweight-Lösung zum Abrufen mehrerer Rückgabewerte bereitstellt.You can use a tuple, which provides a lightweight solution to retrieving multiple return values.

Die tryanalyse -Methoden in .net geben z. b. einen Boolean Wert zurück, der angibt, ob der Analyse Vorgang erfolgreich war.For example, the TryParse methods in .NET return a Boolean value that indicates whether the parsing operation succeeded. Das Ergebnis des-Vorgangs wird in einer Variablen zurückgegeben, die als Verweis an die-Methode ausgegeben wird.The result of the parsing operation is returned in a variable passed by reference to the method. In der Regel sieht ein aufrufungs Methode, z. b. Int32.TryParse, wie folgt aus:Normally, a call to the a parsing method such as Int32.TryParse looks like the following:

Dim numericString As String = "123456"
Dim number As Integer
Dim result = Int32.TryParse(numericString, number)
Console.WriteLine($"{If(result, $"Success: {number:N0}", "Failure")}")
'      Output: 123,456

Wir können ein Tupel aus dem Verarbeitungsvorgang zurückgeben, wenn wir den Aufrufen der Int32.TryParse-Methode in unserer eigenen Methode einschließen.We can return a tuple from the parsing operation if we wrap the call to the Int32.TryParse method in our own method. Im folgenden Beispiel ruft NumericLibrary.ParseInteger die Int32.TryParse-Methode auf und gibt ein benanntes Tupel mit zwei-Elementen zurück.In the following example, NumericLibrary.ParseInteger calls the Int32.TryParse method and returns a named tuple with two elements.

Imports System.Globalization

Public Module NumericLibrary
    Public Function ParseInteger(value As String) As (Success As Boolean, Number As Int32)
        Dim number As Integer
        Return (Int32.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, number), number)
    End Function
End Module

Anschließend können Sie die-Methode mit Code wie dem folgenden aufzurufen:You can then call the method with code like the following:

Dim numericString As String = "123,456"
Dim result = ParseInteger(numericString)
Console.WriteLine($"{If(result.Success, $"Success: {result.Number:N0}", "Failure")}")
Console.ReadLine()
'      Output: Success: 123,456

Visual Basic Tupel und Tupel in der .NET FrameworkVisual Basic tuples and tuples in the .NET Framework

Ein Visual Basic Tupel ist eine Instanz eines der generischen System. valuetuple -Typen, die in der .NET Framework 4,7 eingeführt wurden.A Visual Basic tuple is an instance of one of the System.ValueTuple generic types, which were introduced in the .NET Framework 4.7. Die .NET Framework enthält auch einen Satz generischer System. Tuple -Klassen.The .NET Framework also includes a set of generic System.Tuple classes. Diese Klassen unterscheiden sich jedoch von Visual Basic Tupeln und den generischen System. valuetuple -Typen auf verschiedene Weise:These classes, however, differ from Visual Basic tuples and the System.ValueTuple generic types in a number of ways:

  • Die Elemente der tupelklassen sind Eigenschaften mit dem Namen Item1, Item2 usw.The elements of the Tuple classes are properties named Item1, Item2, and so on. In Visual Basic Tupel und den valuetuple -Typen sind Tupelelemente Felder.In Visual Basic tuples and the ValueTuple types, tuple elements are fields.

  • Sie können den Elementen einer tupelinstanz oder einer valuetuple -Instanz keine aussagekräftigen Namen zuweisen.You cannot assign meaningful names to the elements of a Tuple instance or of a ValueTuple instance. Mit Visual Basic können Sie Namen zuweisen, die die Bedeutung der Felder übermitteln.Visual Basic allows you to assign names that communicate the meaning of the fields.

  • Die Eigenschaften einer tupelinstanz sind schreibgeschützt. die Tupel sind unveränderlich.The properties of a Tuple instance are read-only; the tuples are immutable. In Visual Basic Tupel und den valuetuple -Typen werden tupelfelder mit Lese-/Schreibzugriff. die Tupel sind änderbar.In Visual Basic tuples and the ValueTuple types, tuple fields are read-write; the tuples are mutable.

  • Die generischen Tupeltypen sind Verweis Typen.The generic Tuple types are reference types. Die Verwendung dieser Tupeltypen bedeutet das Zuweisen von Objekten.Using these Tuple types means allocating objects. Auf dem langsamsten Pfad kann das einen messbaren Einfluss auf die Leistung Ihrer Anwendungen haben.On hot paths, this can have a measurable impact on your application's performance. Visual Basic Tupel und die valuetuple -Typen sind Werttypen.Visual Basic tuples and the ValueTuple types are value types.

Erweiterungs Methoden in der TupleExtensions-Klasse erleichtern das Konvertieren zwischen Visual Basic Tupeln und .net- tupelobjekten .Extension methods in the TupleExtensions class make it easy to convert between Visual Basic tuples and .NET Tuple objects. Die Methode " detuple " konvertiert ein Visual Basic Tupel in ein .net- tupelobjekt , und die Methode " devaluetuple " konvertiert ein .net Tupel -Objekt in ein Visual Basic Tupel.The ToTuple method converts a Visual Basic tuple to a .NET Tuple object, and the ToValueTuple method converts a .NET Tuple object to a Visual Basic tuple.

Im folgenden Beispiel wird ein Tupel erstellt, in ein .net- tupelobjekt konvertiert und wieder in ein Visual Basic Tupel konvertiert.The following example creates a tuple, converts it to a .NET Tuple object, and converts it back to a Visual Basic tuple. Im Beispiel wird dann dieses Tupel mit dem ursprünglichen verglichen, um sicherzustellen, dass Sie gleich sind.The example then compares this tuple with the original one to ensure that they are equal.

Module Example
    Sub Main()
        Dim cityInfo = (name:="New York", area:=468.5, population:=8_550_405)
        Console.WriteLine($"{cityInfo}, type {cityInfo.GetType().Name}")

        ' Convert the Visual Basic tuple to a .NET tuple.
        Dim cityInfoT = TupleExtensions.ToTuple(cityInfo)
        Console.WriteLine($"{cityInfoT}, type {cityInfoT.GetType().Name}")

        ' Convert the .NET tuple back to a Visual Basic tuple and ensure they are the same.
        Dim cityInfo2 = TupleExtensions.ToValueTuple(cityInfoT)
        Console.WriteLine($"{cityInfo2}, type {cityInfo2.GetType().Name}")
        Console.WriteLine($"{NameOf(cityInfo)} = {NameOf(cityInfo2)}: {cityInfo.Equals(cityInfo2)}")
        Console.ReadLine()
    End Sub
End Module
' The example displays the following output:
'       (New York, 468.5, 8550405), type ValueTuple`3
'       (New York, 468.5, 8550405), type Tuple`3
'       (New York, 468.5, 8550405), type ValueTuple`3
'       cityInfo = cityInfo2 :  True

Siehe auchSee also