Forum: PC-Programmierung VB.net Object Min/Max feststellen


von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


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

: Bearbeitet durch User
von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Gibt es echt keine Möglichkeit?

von bluppdidupp (Gast)


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);

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


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.

: Bearbeitet durch User
von bluppdidupp (Gast)


Lesenswert?

Der "|"-Operator ist in vb.net doch bestimmt nicht "&"? - Das wäre auf 
jedenfall sehr unglücklich gewählt ;D

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.