vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
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:     [ Jetzt bewerten ]Views:  9.089 
ohne HomepageSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11kein 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