public static Guid ToGuid(this string value) { Guid g; if (Guid.TryParse(value, out g)) { return(g); } ShortGuid sg = value; if (sg != null) { return(sg.Guid); } return(Guid.NewGuid()); }
public static string ToShortString(this Guid value) { ShortGuid g = value; return(g.ToString()); }
/// <summary> /// Tries to parse this text to the specified type. /// Returns null if parsing is not possible. /// </summary> public static T?TryParseAs <T>(this string text) where T : struct { if (text.IsEmpty()) { return(default(T?)); } // Check common types first, for performance: if (typeof(T) == typeof(int)) { int result; if (int.TryParse(text, out result)) { return((T)(object)result); } else { return(null); } } if (typeof(T) == typeof(double)) { double result; if (double.TryParse(text, out result)) { return((T)(object)result); } else { return(null); } } if (typeof(T) == typeof(decimal)) { decimal result; if (decimal.TryParse(text, out result)) { return((T)(object)result); } else { return(null); } } if (typeof(T) == typeof(bool)) { bool result; if (bool.TryParse(text, out result)) { return((T)(object)result); } else { return(null); } } if (typeof(T) == typeof(DateTime)) { DateTime result; if (DateTime.TryParse(text, out result)) { return((T)(object)result); } else { return(null); } } if (typeof(T) == typeof(TimeSpan)) { TimeSpan result; if (TimeSpan.TryParse(text, out result)) { return((T)(object)result); } else { return(null); } } if (typeof(T) == typeof(Guid)) { Guid result; if (Guid.TryParse(text, out result)) { return((T)(object)result); } else { return(null); } } if (typeof(T).IsEnum) { T result; return(Enum.TryParse(text, ignoreCase: true, result: out result) ? (T?)result : null); } if (typeof(T) == typeof(ShortGuid)) { try { return((T)(object)ShortGuid.Parse(text)); } catch { return(null); // No logging is needed } } if (typeof(T).IsA <IEntity>()) { return((T)Database.GetOrDefault(text, typeof(T))); } try { return((T)Convert.ChangeType(text, typeof(T))); } catch { return(null); } }
static object ChangeType(string text, Type targetType) { var actualTargetType = targetType; if (targetType == typeof(string)) { return(text); } if (text.IsEmpty()) { return(targetType.IsValueType ? Activator.CreateInstance(targetType) : null); } bool isNullable = targetType.IsNullable(); if (isNullable) { targetType = targetType.GetGenericArguments().Single(); } // Check common types first, for performance: try { if (targetType == typeof(int)) { return(int.Parse(text)); } if (targetType == typeof(long)) { return(long.Parse(text)); } if (targetType == typeof(double)) { return(double.Parse(text)); } if (targetType == typeof(decimal)) { return(decimal.Parse(text)); } if (targetType == typeof(bool)) { return(bool.Parse(text)); } if (targetType == typeof(DateTime)) { return(DateTime.Parse(text)); } if (targetType == typeof(Guid)) { return(new Guid(text)); } if (targetType == typeof(TimeSpan)) { if (text.Is <long>()) { return(TimeSpan.FromTicks(text.To <long>())); } else { return(TimeSpan.Parse(text)); } } } catch { if (targetType.IsAnyOf(typeof(int), typeof(long))) { if (text.Contains(".") && text.TrimBefore(".", caseSensitive: true, trimPhrase: true).All(x => x == '0')) { return(text.TrimAfter(".").To(actualTargetType)); } } if (isNullable) { return(null); } else { throw; } } if (targetType.IsEnum) { return(Enum.Parse(targetType, text)); } if (targetType == typeof(Xml.Linq.XElement)) { return(Xml.Linq.XElement.Parse(text)); } if (targetType == typeof(Xml.Linq.XDocument)) { return(Xml.Linq.XDocument.Parse(text)); } if (targetType == typeof(ShortGuid)) { return(ShortGuid.Parse(text)); } if (targetType.IsA <IEntity>()) { return(Database.GetOrDefault(text, targetType)); } if (targetType == typeof(Color)) { if (!text.StartsWith("#") || text.Length != 7) { throw new Exception("Invalid color text. Expected format is #RRGGBB."); } return(Color.FromArgb(int.Parse(text.TrimStart("#").WithPrefix("FF"), NumberStyles.HexNumber))); } return(Convert.ChangeType(text, targetType)); }
/// <summary> /// 返回 <see cref="Guid"/> 结构的此实例值的字符串表示形式,格式:<see cref="ShortGuid"/> /// </summary> /// <param name="guid"></param> /// <returns></returns> public static string ToStringS(this Guid guid) => ShortGuid.Encode(guid);
public Entity() { Id = ShortGuid.NewGuid().ToString(); }