public static void WriteNullable(Type inner, string name, object value) { var hasValueProp = typeof(Nullable <>).MakeGenericType(inner).GetProperty("HasValue"); var valueProp = typeof(Nullable <>).MakeGenericType(inner).GetProperty("Value"); var hasValue = (bool)hasValueProp.GetValue(value); WriteBool(name + ".exists", hasValue); if (hasValue) { WriterForType(inner)(name, valueProp.GetValue(value)); } }
private static void WriteEnumerable(Type inner, string name, IEnumerable value, int originalLength) { var origLen = ReadInt(name + ".len", InvalidLen); if (value != null) { int i = 0; foreach (var item in value) { WriterForType(inner)(name + "." + i, item); i++; } } if (origLen != InvalidLen) { for (int i = value?.Count() ?? 0 - 1; i >= origLen; i--) { PlayerPrefs.DeleteKey(name + "." + i); } } }
public static void Write <T>(string name, T value) => WriterForType(typeof(T))(name, value);