これは、文書化されたVarToStr
関数の動作です。車輪の再発明をする必要はありません。
ヌルバリアントは別個のタイプであり(はい、それは単なる値ではなくタイプです)、欠落しているデータまたは不明なデータのいずれかを示します。したがって、厳密に言えば、通常のバリアントの動的型付けNull
は値を使用して行われるべきではありません( RTLのデフォルトに示され反映されています)。
与えられた:
var
V: Variant;
S: string;
より良いコード
S := VarToStr(V); { stongly-typed explicit conversion }
比較的良いコード
if not VarIsNull(V) then { program knows what it does, but reproduces RTL behaviour }
S := V
else
S := NullAsStringValue;
悪いコード
NullStrictConvert := False; { smelly, from now on Null variant loses its specifics }
S := V;
さらに悪いコード
try
S := V;
except on Eaten: Exception do { stinky PHP-style, hiding error instead of fixing it }
S := NullAsStringValue;
end;
注:最近のDelphi.NETのほとんどは、Nullバリアントでまったく同じ動作を示すため、.NETに関するOPの発言には疑問があります。