vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Variablen/Strings   |   VB-Versionen: VB200803.02.09
Erweiterte SWAP-Funktion

Eine SWAP-Funktion, die beim Austausch des Inhalts von Variablen unterschiedlichen Typs Konvertierungen vornimmt.

Autor:   Manfred BohnBewertung:  Views:  8.149 
ohne HomepageSystem:  Win2k, WinXP, Vista, Win7, Win8, Win10kein Beispielprojekt 

Die erweiterte Swap-Funktion Swaps tauscht nicht nur den Inhalt von zwei Variablen des gleichen Datentyps, sondern ermöglicht auch den Austausch zwischen verschiedenen Datentypen, wenn - z.T. auch abhängig vom Inhalt - eine Konvertierung möglich ist.

Dabei kann es allerdings im Einzelfall zu Informationsverlusten kommen.

Einige Beispiele:

' funktioniert, weil der Variableninhalt korrespondiert
Dim ss As String = "false", bl As Boolean = True
If Not Swaps(ss, bl) Then Stop
' funktioniert, aber mit Informationsverlust 
' (Eingrenzungskonvertierung)
Dim db As Double = 1.2345, ii As Integer = -5
If Not Swaps(db, ii) Then Stop
' funktioniert, weil String ein Referenztyp ist
Dim obj As Object = Nothing, st As String = "unmöglich"
If Not Swaps(obj, st) Then Stop
' funktioniert, weil Arrayvariable Referenzen sind
' und Rank sowie Typ identisch sind
Dim arr(5, 2) As Integer, ar(60, 1) As Integer
If Not Swaps(arr, ar) Then Stop
' funktioniert, weil ein identischer anonymer Typ vorliegt
Dim ano1 = New With {.hh = 1, .uu = 2}
Dim ano2 = New With {.hh = 5, .uu = 3}
If Not Swaps(ano1, ano2) Then Stop
' Scheinbar konvertierbar / Swaps erkennt nicht, dass 
' Konstanten als Parameter gegeben worden sind !!!
Const fünf As Integer = 5
If Not Swaps(fünf, 6) Then Stop
' funktioniert, weil 'Object' variabel ist
Dim obj1 As Object = "sowas"
Dim obj2 As Object = 50000
If Not Swaps(obj1, obj2) Then Stop
' funktioniert, weil der Inhalt korrespondiert
Dim bol As Boolean = True, byt As Byte = 0
If Not Swaps(bol, byt) Then Stop
' funktioniert, weil alles ausser 0 'true' wird
byt = 20
If Not Swaps(bol, byt) Then Stop

Und hier die neue Funktion Swaps:

Public Function Swaps(Of T1, T2) ( _
  ByRef Var1 As T1, ByRef Var2 As T2) As Boolean
 
  Try
    ' Versuch, den Variablen-Inhalt zu vertauschen
    Dim ivar2 As T2 = CType(Convert.ChangeType(Var1, GetType(T2)), T2)
    Dim ivar1 As T1 = CType(Convert.ChangeType(Var2, GetType(T1)), T1)
    ' Tausch hat geklappt - Rückgabe der Werte
    Var2 = ivar2 : Var1 = ivar1
    Return True
  Catch
    ' war wohl nix
    Return False
  End Try
End Function



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2020 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.