Hur kan jag läsa av vilken datatyp en variabel har?
Vilken datatyp?
4 svar · 191 visningar · startad av clarkbones
För referenstyper kan man använda TypeOf-operatorn:
if TypeOf x is ADODB.Connection then ..
För enkla värdetyper (integer, long ..) tror jag inte det går. Fast då finns det väl egentligen aldrig nåt behov eftersom dessa inte kan ändras run-time?
Nja, det är så att jag har en funktion accepterar vissa inparametrar. En inparameter ska vara ett tal. Om nu användaren skriver "kalle" istället för 1, 178 eller 3042 så vill jag kunna upplysa användaren om att inmatningen är fel. Jag trodde det fanns något enkelt sätt att bara läsa av datatypen. Men jag kan nog göra någon lite mer avancerad funktion som kollar vad användaren matat in...
Men vad menar du att de inte kan ändras run-time? Om jag kör cstr till exempel så är väl det an datatypsförändring som sker run time?
Tack för hjälpen...
OK. Det verkar som jag missförstod lite. Det du talar om skulle jag snarare kalla formatet än typen på datan och du borde kunna använda funktioner som tex IsNumeric.
clarkbones skrev:
Men vad menar du att de inte kan ändras run-time? Om jag kör cstr till exempel så är väl det an datatypsförändring som sker run time?
Jag menar ungefär så här: Om X är en referenstyp så kan X referera till olika saker under körningen och det kan finnas behov av att kolla typen:
dim X as Object
set x= new ADODB.Connection
'40 rader längre ner:
set X = new ADODB.RecordSet
' Ännu längre ner:
if TypeOf X is ADODB.Connection then ..
Om X däremot är en värdetyp tex en Integer så är ju detta fastslaget redan under kompileringen och X kan aldrig representera nåt annat än 2 bytes i minnet. CStr och andra konverteringfunktioner används när man vill omtolka datan och placera den nån annanstans:
dim X as Integer
Dim Y as String
X=7
Y=CStr(X)
Här kommer ju X för evigt att fortsätta vara en 2-bytes integer och det finns aldrig nåt behov av att skriva tex:
if TypeOf X is Integer then
Det var så jag menade ..
OK, tack för att du tog tid.