Mit .Net, wie kann ich ermitteln, ob ein Typ ein Numerischer ValueType?
Aber hier ist ein Beispiel:
Dim desiredType as Type
if IsNumeric(desiredType) then ...
EDIT: ich kenne nur den Typ, nicht den Wert als string.
Ok, also ich habe leider zu Zyklus durch die TypeCode.
Aber dies ist ein schöner Weg, es zu tun:
if ((desiredType.IsArray))
return 0;
switch (Type.GetTypeCode(desiredType))
{
case 3:
case 6:
case 7:
case 9:
case 11:
case 13:
case 14:
case 15:
return 1;
}
;return 0;
Ein paar Jahre zu spät hier, aber warum IsArray egal? Ein Array ist ein Objekt und sollte fehlschlagen, Ihre Schalter.
InformationsquelleAutor Nescio | 2008-09-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein paar Jahre zu spät hier, aber hier ist meine Lösung (Sie können wählen, ob boolean). Löst für die Nullable-Fall. XUnit test enthalten
yup...toller Vorschlag. eleganter so. aktualisierte post.
warum nicht erklären, dass diese Methode in einer statischen Klasse und zur Verfügung zu stellen Typ:
public static bool IsNumeric(this Type type) { /*...*/ }
?Schöne Lösung und auch +1 für tests. Auf jeden Fall besser als akzeptierte Antwort.
Schöne Lösung, nur bewusst sein, dass eine Enum-würde eingestuft werden als eine ganze Zahl mit der obigen Logik
InformationsquelleAutor SFun28
Können Sie herausfinden, ob eine variable numerisch ist mit der
Type.GetTypeCode()
Methode:Werden Sie brauchen, um abgeschlossen alle verfügbaren numerischen Typen in der " ... " - Teil 😉
Mehr details hier: TypeCode-Enumeration
FYI, dieser code wird nicht funktionieren, wenn Sie auf null festlegbaren Typen. In diesem Fall wird der typecode zurück, die als Objekt. Immer noch versuchen, herauszufinden, wie man das umgehen kann. Wer?
Besser: Foreach (TypeCode typecode in new TypeCode[] { TypeCode.Double [...] } wenn typecode == Typ.GetTypeCode(desiredType) return true; return false;
warum konnte Sie nicht auch, Jungs tun Sie es einfach für uns, so können wir copy/paste?
Sie tun kann "wenn (1 int)" in C# nicht", wenn (1.GetType() ist int)". Ich hoffe, Sie bekommen die Idee.
InformationsquelleAutor Jon Limjap
Tollen Artikel hier Erkunden IsNumeric für C#.
Option 1:
Referenz Microsoft.VisualBasic.dll, dann tun Sie das folgende:
Option 2:
InformationsquelleAutor Jorge Ferreira
Wenn Sie einen Verweis auf ein Tatsächliches Objekt, hier ist eine einfache Lösung für C#, das ist ganz einfach:
Das ist eigentlich das gleiche der typecode-basierte Lösungen vor, außer, dass es langsamer...
InformationsquelleAutor Mark Jones
Mit aller gebührenden Anerkennung an @SFun28 und @nawfal (danke!), Ich habe sowohl die Antworten, gezwickt leicht und kam mit dieser extension Methoden:
Ich konnte sehen, Enumerationen ein Graubereich, aber ich würde irren auf der Seite der false. Sagen Sie bauen ein JSON serializer und wollen enums serialisierte strings. In diesem Fall würden Sie nicht wollen, Sie zu behandeln wie eine Zahl.
InformationsquelleAutor Todd Menier
Dies ist, wie MS hat es umgesetzt in
System.Dynamic.Utils.TypeUtils
das eine innere Klasse. Stellt sich heraus, dass Sie derzeit prüfenSystem.Decimal
einen numerischen Typ (Decimal
ausgelassen, enumeration). Und interessanterweise MS findetSystem.Char
Typ numerisch sein. Ansonsten ist es genau das gleiche wie SFun28 Antwort. Ich vermute, seine Antwort ist "richtiger".InformationsquelleAutor nawfal
Ich weiß, das ist eine SEHR späte Antwort, aber hier ist die Funktion die ich benutze:
Wenn Sie ausschließen wollten
char
sich wie ein numerischer Typ, können Sie mit diesem Beispiel:Laut der MSDN:
Hinweis: Diese Prüfung umfasst IntPtr und UIntPtr.
Hier ist die gleiche Funktion wie eine generische Erweiterungsmethode (ich weiß, das funktioniert nicht für die OP ' s Fall, aber jemand anderes könnte es nützlich finden):
InformationsquelleAutor Josh T.
Völlig falsch, SByte ist numerisch und hat die id 5, die '0101', so ist dies falsch.
InformationsquelleAutor Mike
Art Der Benutzung.IsValueType() und TryParse():
InformationsquelleAutor Mike Post