Ich schreibe eine Serializer-Klasse und ich versuche, eine Funktion zu schreiben, um jede Enumeration serialisieren zu können (könnte durch int, byte, ulong ... unterstützt werden). Wird das so funktionieren, wie ich es möchte? Gibt es einen besseren Weg, es zu tun?Enum-Konvertierung/Serialisierung
public bool Serialize<TEnum>(ref TEnum data, TEnum min, TEnum max) where TEnum : struct, IComparable, IFormattable, IConvertible
{
if (!typeof(TEnum).IsEnum)
{
throw new ArgumentException("arguments must be an Enum");
}
Type eType = Enum.GetUnderlyingType(data.GetType());
if (eType == typeof(byte) || eType == typeof(ushort) || eType == typeof(uint) || eType == typeof(ulong))
{
var data2 = (ulong) Convert.ChangeType(data, eType);
var min2 = (ulong) Convert.ChangeType(min, eType);
var max2 = (ulong) Convert.ChangeType(max, eType);
if (IsReading)
{
bool success = bs.Read(out data2, min2, max2);
data = (TEnum) Convert.ChangeType(data2, typeof(TEnum));
return success;
}
bs.Write(data2, min2, max2);
}
else
{
var data2 = (long) Convert.ChangeType(data, eType);
var min2 = (long) Convert.ChangeType(min, eType);
var max2 = (long) Convert.ChangeType(max, eType);
if (IsReading)
{
bool success = bs.Read(out data2, min2, max2);
data = (TEnum) Convert.ChangeType(data2, typeof(TEnum));
return success;
}
bs.Write(data2, min2, max2);
}
return true;
}
Gibt es einen Grund, warum Sie nicht einen der eingebauten Serialisierer verwenden oder, wenn dies nicht funktioniert, etwas wie JSON.NET? –
besser, wenn Code in separate Funktion, die Boolean zurückgeben wird und deklarieren alle Variablen oben auf der Funktion stattdessen in wenn und sonst, weil Sie redundante Sache tun, könnte es mir helfen, Sie auch diesen Code zu reinigen. und Sie können auch für Pakete von Drittanbietern versuchen Hoffe, es wird helfen Danke –
@MatthewWatson gibt es einen Grund, aber es ist nicht wirklich relevant für die Frage. Ich versuche herauszufinden, generische Enum-Konvertierung. – Tim