VB.net Object Min/Max feststellen

OP (Firma: tsx89) Persönliche Seite #3429275
Lesenswert?

Hallo Leute, mal angenommen, ich hab eine Nummerische Variable 'X', 
dessen Typ ein beliebig verfügbarer Int-Type aus dem .Net-Framework ist. 
(also Int, Int16, Int64, UInt, etc) Und ich möchte herausfinden, welchen 
Min/Max-Wert dieser Typ annehmen kann:
1
Dim min As Decimal
2
Dim max As Decimal
3
Dim X As Integer  'oder beliebiger IntType
4

5
Select Case X.GetType               
6
 Case GetType(Int16)
7
      max = Int16.MaxValue
8
      min = Int16.MinValue
9
 Case GetType(Int32)
10
      max = Int32.MaxValue
11
      min = Int32.MinValue
12
 Case GetType(Int64)
13
      max = Int64.MaxValue
14
      min = Int64.MinValue
15
 Case ...
16
End Select
17

18
MsgBox("X.max=" & max.ToString & vbNewLine & ", X.min=" & min.ToString)

Wie kann ich das machen, ohne jeden einzelnen Typen per Select-Case, 
oder noch umständlicherem abzufragen?

Danke schon mal im Voraus
Gruß, TS
Gast #3436113
Lesenswert?

Ich verstehe zwar nicht wozu man das braucht, aber Reflection wäre da 
eine Möglichkeit. Hier die C#-Variante ohne Prüfung auf mögliche 
Fehlerquellen (z.B. obj=null, oder Typ von obj hat kein .MaxValue)
1
long einLong=long.MinValue;
2
            
3
object obj=einLong; // von obj soll das statische Feld "MaxValue" ausgelesen werden
4

5
// Das Feld "MaxValue" aus dem Typ von obj holen:
6
FieldInfo fieldInfo=obj.GetType().GetField("MaxValue",BindingFlags.Static|BindingFlags.Public);            
7

8
// Feld "MaxValue" von obj auslesen:
9
object fieldValue=fieldInfo.GetValue(obj);
10
// ..und auf der Konsole ausgeben:
11
Console.WriteLine("obj.MaxValue: "+fieldValue);
OP (Firma: tsx89) Persönliche Seite #3438399
Lesenswert?

bluppdidupp schrieb:
> Ich verstehe zwar nicht wozu man das braucht

Ich möchte eine GUI schreiben, bei der man zur Laufzeit dynamisch 
beliebige Objekte instanziieren kann. Die Construcoren der Objekte haben 
Parameter, und diese müssen einen Wert annehmen. Daher stellt das GUI 
ein NumericUpDown oder DomainUpDown-Control bei Int-Typen bereit, um 
diesen Wert einzustellen. Diese Controls benötigen den Min/Max Wert.

Deine Idee mit Reflection ist super, nur leider ist diese Fieldinfo dann 
"Nothing":
1
Dim X As Integer = 12345
2
Dim MaxFeld As FieldInfo = SelectedType.GetType().GetField("MaxValue", BindingFlags.Static & BindingFlags.Public)
3
Dim MinFeld As FieldInfo = X.GetType().GetField("MinValue", BindingFlags.Static & BindingFlags.Public)
4
Dim max As Decimal = MaxFeld.GetValue(X)
5
Dim min As Decimal = MinFeld.GetValue(X)

X.GetType.GetFields().Count.ToString   == 0   ??

Kann das eventuell jemand verbessern, oder gibt es eine andere Idee?
Danke schon mal.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren