Wie schreibt man eine einfache Methode, die prüft, ob ein konkreter Typ eine benutzerdefinierte Struktur ist (erstellt mit public struct { };
) oder nicht.
Überprüfen Sie Type.IsValueType
ist nicht genug, denn es gilt auch für int
, long
, usw, und das Hinzufügen eines Schecks an !IsPrimitiveType
wird nicht ausschließen decimal
, DateTime
und vielleicht einige andere Werttypen. Ich weiß, dass die meisten der eingebauten Wertetypen eigentlich "structs" sind, aber ich möchte nur auf "custom structs" prüfen
Diese Fragen sind meist die gleichen, aber ohne die Antwort, die ich brauche:
EDIT: Von den genannten Antworten war die "Prüfung auf das Präfix 'System'" die stabilste (obwohl es immer noch ein Hack ist). Ich habe schließlich beschlossen, ein Attribut zu erstellen, mit dem man die Struktur ausschmücken muss, damit das Framework sie als benutzerdefinierte Struktur aufnimmt. (Die andere Möglichkeit, die ich in Erwägung zog, war, eine leere Schnittstelle zu erstellen und die Struktur diese leere Schnittstelle implementieren zu lassen, aber der Weg über das Attribut schien mir eleganter zu sein)
Hier ist meine ursprüngliche benutzerdefinierte Struktur Checker, wenn jemand, wenn interessiert:
type.IsValueType && !type.IsPrimitive && !type.Namespace.StartsWith("System") && !type.IsEnum
1 Stimmen
Nur aus reiner Neugierde: Warum wollen Sie das aufdecken?
0 Stimmen
Fluent NHibernate + Auto Mapping: Setzen Sie alle benutzerdefinierten Strukturen als Komponenten (Wertobjekte) behandelt werden; Einstellen eines anderen Werttyps, um eine Komponente (wie DateTime oder Dezimal) wird das gesamte Framework zum Absturz bringen (zumindest tut es unter Mono)