Ich habe einige Enum Flags, die eine Version eines externen Systems darstellen. Ich möchte sicherstellen, dass jedes Mal, wenn das externe System seine Version aktualisiert, meine Funktionalität in der Lage sein sollte, es zu unterstützen (ich werde im Voraus wissen, dass die Version aktualisiert wird, also ist es eine proaktive Aktion). Auch meine Kommunikation muss mit diesem System in beide Richtungen erfolgen, dh interne und externe Kommunikation kann unterschiedliche Versionssätze haben.Enum Flags Konvertierungen für Dezimalwerte/Namen
Ich habe ein enum-Flag erstellt, um diese Versionen darzustellen.
[Flags]
public enum ExternalSystemVersionEnum
{
System1 = 1,
System2 = 2,
System3 = 4,
All = 7
}
Dies funktioniert in Ordnung für eine formale größere Upgrades. Leider kann ich diese nicht als System1.0 oder so nennen. Als Dezimalzahlen kann ich auch keinen generischen Enum-Parser verwenden.
(T) Enum.Parse(typeof (T), Convert.ToString(enumValue));
Natürlich habe ich immer noch die oben stattdessen durch Verwendung Schalter/if-Anweisungen erreichen kann, aber ich möchte wirklich überhaupt keine harte Kodierung vermeiden (auch Ressourcen/Inhalte auch wenn ich kann), als ein Die Version des externen Systems kann komplett verworfen werden, und ich möchte nicht daran interessiert sein, alle Strings zu verfolgen.
Auch ich brauche Flags oder gleichwertige Funktionalität, wie ich noch die Kommunikation empfangen kann, die keine Systemversion Identification hat, die standardmäßig zu für alle Versionen geht. Eine andere Kommunikation kann nur auf einige ausgewählte Versionen, z. nur für 2.0 weiter usw.
Bitte beachten Sie, dass ich dies leicht mit Switch/If erreichen kann, aber ich möchte keine harte Codierung haben, es sei denn, es gibt keine andere (einfache) Möglichkeit. Mein Hauptanliegen hier ist eine Funktionalität, die wirkt wie Flags, kann aber leicht identifiziert Werte mit Dezimalstellen, sagen 1.0 oder 1.2 oder 1.3.1 für diese Angelegenheit (obwohl in der Geschichte hatten sie nie doppelte Dezimalstellen) und bietet Kompilierzeit Fehler. Ich bin offen für Vorschläge anderer Mechanismen, aber ich würde wirklich bevorzugen, dass es eine einfache Logik ist, da es ein sehr trivialer Teil des gesamten Prozesses ist.
Was statische Klasse? 'public static class ExternalSystemVersionEnum { öffentliches statisches Doppel System1 = 1.0; public static double System2 = 2.0; öffentliches statisches Doppel System3 = 4.0; öffentliche statische Doppel Alle = 7; } ' –
Ich bin nicht sicher, ob es die Funktionalität der HasFlag-Prüfung entspricht. Nicht, dass es sehr komplex zu bauen ist, aber vermeidet unnötigen Code und reduziert die Wartung. Könnten Sie bitte noch etwas weiter erklären, da ich es vielleicht nicht richtig verstanden habe? – touchofevil