public static string ToString(Type t) { SerializedTypeData data = new SerializedTypeData(); if (t == null) { return(string.Empty); } data.typeName = string.Empty; data.isGeneric = t.ContainsGenericParameters; if (data.isGeneric && t.IsGenericType) { data.typeName = ToShortTypeName(t.GetGenericTypeDefinition()); } else if (data.isGeneric && t.IsArray) { data.typeName = "T[]"; } else if (data.isGeneric) { data.typeName = "T"; } else { data.typeName = ToShortTypeName(t); } return(ToString(data)); }
public static bool CanAssignFromGenericType(string serializedTypeString, Type t) { SerializedTypeData data = SplitTypeString(serializedTypeString); if (!data.isGeneric) { return(false); } if (t.IsGenericType) { if ((data.typeName == "T") || (data.typeName == "T[]")) { return(false); } Type[] genericArguments = t.GetGenericArguments(); if (genericArguments.Length != 1) { return(false); } if (genericArguments[0].IsGenericType) { return(false); } return(t.GetGenericTypeDefinition() == FromString(data).GetGenericTypeDefinition()); } return((data.typeName == "T") || (data.typeName == "T[]")); }
public static string SetGenericArgumentType(string serializedTypeString, Type type) { if (!IsGeneric(serializedTypeString)) { if (IsBaseTypeGeneric(serializedTypeString)) { throw new ArgumentException("Trying to set a different generic type. Reset old one first."); } throw new ArgumentException("Trying to set generic argument type for non generic type."); } SerializedTypeData data = SplitTypeString(serializedTypeString); data.genericTypeName = data.typeName; data.isGeneric = false; switch (data.typeName) { case "T": data.typeName = ToShortTypeName(type); break; case "T[]": data.typeName = ToShortTypeName(type.MakeArrayType()); break; default: { Type[] typeArguments = new Type[] { type }; data.typeName = ToShortTypeName(Type.GetType(data.typeName, true).GetGenericTypeDefinition().MakeGenericType(typeArguments)); break; } } return(ToString(data)); }
public static bool IsBaseTypeGeneric(string serializedTypeString) { if (string.IsNullOrEmpty(serializedTypeString)) { return(false); } SerializedTypeData data = SplitTypeString(serializedTypeString); return(data.isGeneric || (data.genericTypeName != string.Empty)); }
public static string ResetGenericArgumentType(string serializedTypeString) { if (string.IsNullOrEmpty(serializedTypeString)) { throw new ArgumentException("Cannot reset generic argument type for null type."); } SerializedTypeData data = SplitTypeString(serializedTypeString); if (string.IsNullOrEmpty(data.genericTypeName)) { throw new ArgumentException("Cannot reset generic argument type, previous generic type unknown."); } data.typeName = data.genericTypeName; data.isGeneric = true; data.genericTypeName = string.Empty; return(ToString(data)); }
private static Type FromString(SerializedTypeData data) { return Type.GetType(data.typeName, true); }
private static string ToString(SerializedTypeData data) { string[] textArray1 = new string[] { data.typeName, "#", data.genericTypeName, "#", !data.isGeneric ? "0" : "1" }; return string.Concat(textArray1); }
public static string ToString(Type t) { SerializedTypeData data = new SerializedTypeData(); if (t == null) { return string.Empty; } data.typeName = string.Empty; data.isGeneric = t.ContainsGenericParameters; if (data.isGeneric && t.IsGenericType) { data.typeName = ToShortTypeName(t.GetGenericTypeDefinition()); } else if (data.isGeneric && t.IsArray) { data.typeName = "T[]"; } else if (data.isGeneric) { data.typeName = "T"; } else { data.typeName = ToShortTypeName(t); } return ToString(data); }
private static Type FromString(SerializedTypeData data) => Type.GetType(data.typeName, true);
private static string ToString(SerializedTypeData data) { string[] textArray1 = new string[] { data.typeName, "#", data.genericTypeName, "#", !data.isGeneric ? "0" : "1" }; return(string.Concat(textArray1)); }