public void Write(Enum value) { var names = EnumExtensions.ConvertToNames((Enum)value); if (value.GetType().IsDefined(typeof(FlagsAttribute), false)) { foreach (var name in names) { Write(name); } Write((ushort)0); } else if (names.Any()) { Write(names.First()); } else { Write((ushort)0); } }
public static void WriteProperty(object value, REDBinaryWriter stream) { var type = value.GetType(); if (type.IsEnum) { var names = EnumExtensions.ConvertToNames((Enum)value); if (type.IsDefined(typeof(FlagsAttribute), false)) { foreach (var name in names) { stream.Write(name); } stream.Write((ushort)0); } else { if (names.Count() == 0) { stream.Write((ushort)0); } else { stream.Write(names.First()); } } return; } var tCode = Type.GetTypeCode(type); switch (tCode) { case TypeCode.Byte: stream.Write((byte)value); return; case TypeCode.UInt16: stream.Write((ushort)value); return; case TypeCode.UInt32: stream.Write((uint)value); return; case TypeCode.UInt64: stream.Write((ulong)value); return; case TypeCode.SByte: stream.Write((sbyte)value); return; case TypeCode.Int16: stream.Write((short)value); return; case TypeCode.Int32: stream.Write((int)value); return; case TypeCode.Int64: stream.Write((long)value); return; case TypeCode.Boolean: stream.Write((bool)value); return; case TypeCode.Single: stream.Write((float)value); return; case TypeCode.Double: stream.Write((double)value); return; case TypeCode.String: stream.Write((string)value); return; } if (value is IExportable obj) { } }