Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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[]"));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        public static bool IsBaseTypeGeneric(string serializedTypeString)
        {
            if (string.IsNullOrEmpty(serializedTypeString))
            {
                return(false);
            }
            SerializedTypeData data = SplitTypeString(serializedTypeString);

            return(data.isGeneric || (data.genericTypeName != string.Empty));
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
 private static Type FromString(SerializedTypeData data)
 {
     return Type.GetType(data.typeName, true);
 }
Ejemplo n.º 7
0
 private static string ToString(SerializedTypeData data)
 {
     string[] textArray1 = new string[] { data.typeName, "#", data.genericTypeName, "#", !data.isGeneric ? "0" : "1" };
     return string.Concat(textArray1);
 }
Ejemplo n.º 8
0
 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);
 }
Ejemplo n.º 9
0
 private static Type FromString(SerializedTypeData data) =>
 Type.GetType(data.typeName, true);
Ejemplo n.º 10
0
 private static string ToString(SerializedTypeData data)
 {
     string[] textArray1 = new string[] { data.typeName, "#", data.genericTypeName, "#", !data.isGeneric ? "0" : "1" };
     return(string.Concat(textArray1));
 }