AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [Variants] 0 = Unassigned, wieso das denn?
Thema durchsuchen
Ansicht
Themen-Optionen

[Variants] 0 = Unassigned, wieso das denn?

Ein Thema von alzaimar · begonnen am 8. Jul 2008 · letzter Beitrag vom 9. Jul 2008
 
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: [Variants] 0 = Unassigned, wieso das denn?

  Alt 8. Jul 2008, 19:33
Hallo alzaimar, ich verstehe dein Problem nicht wirklich.

Zitat von alzaimar:
ich arbeite mal wieder mit Variants und dabei kriege ich wegen folgendem Bug ne Krise:
Wie kommst du darauf, dass das ein Bug ist?

Zitat von alzaimar:
Hi,
Delphi-Quellcode:
Var
  v : Variant;

begin
  v := 0;
  if v = Unassigned then ShowMessage('Delphi ist (Del)phies');
end;
Was ist denn deine Absicht? Willst du prüfen, ob die Variant v leer ist (sprich kein Wert zugewiesen wurde)?

Nach meinem Verständnis geht das mit Unassigned nicht. Unassigned ist lediglich dazu da, um eine Variant auf leer zu setzen, nicht um zu prüfen. Was würde man denn da auch prüfen? Leer = Leer? Nicht leer = Leer? Sein oder nicht sein?

Auszug aus der MSDN:

Eine Varianten-Variable kann leer sein, d.h., dass noch kein Wert zugewiesen wurde. Die Funktion Unassigned gibt eine leere Variante zurück, die einer Varianten-Variable zugewiesen werden kann, um den Anfangsstatus der Variable wiederherzustellen.

Verwenden Sie die Funktion VarIsEmpty , um zu prüfen, ob eine Variante leer ist. Bei einer leeren Variante gibt die Standardfunktion VarType den Wert varEmpty zurück.


Zur Verdeutlichung:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
Var
  g: Variant;
  v: Variant;
begin
  if g = v then ShowMessage('Leere Variant = Leere Variant ???');

  if VarIsNull(v) then ShowMessage('VarIsNull vorher');
  if VarIsEmpty(v) then ShowMessage('VarIsEmpty vorher');

  v := 0; // Wert wird zugewiesen, Variant ist also nicht mehr leer,
          // könnte aber mit Unassigned wieder leer gesetzt werden.

// if v = Unassigned then ShowMessage('Delphi ist (Del)phies');
  if VarIsNull(v) then ShowMessage('VarIsNull mittendrin');
  if VarIsEmpty(v) then ShowMessage('VarIsEmpty mittendrin');

  v := Null;

  if VarIsNull(v) then ShowMessage('VarIsNull nachher');
  if VarIsEmpty(v) then ShowMessage('VarIsEmpty nachher');
end;
Sieh dir mal die Ergebnisse an. Soweit ich das verstehe ist leer != 0 und 0 != Null (und für den Fall der Fälle Null != nil)

Ich hoffe, ich hab das nicht falsch verstanden.

Guido.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz