Ejemplo n.º 1
0
 public static bool CanBeGeneratedUniquely(Type typeArgument)
 {
     return(typeArgument.IsEnum || typeof(string).IsAssignableFrom(typeArgument) ||
            GenericFlowSwitchHelper.IsIntegralType(typeArgument) || typeof(bool) == typeArgument);
 }
Ejemplo n.º 2
0
        public static string GenericGetCaseName <T>(ModelItemCollection collection, out string errorMessage)
        {
            int  maxName = 100000;
            Type type    = typeof(T);

            errorMessage = string.Empty;
            if (typeof(string).IsAssignableFrom(type))
            {
                string caseName = "caseN";
                for (int i = 1; i <= maxName; i++)
                {
                    caseName = string.Format(CultureInfo.InvariantCulture, SR.CaseFormat, i);
                    if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, caseName))
                    {
                        break;
                    }
                }
                return(caseName);
            }
            else if (GenericFlowSwitchHelper.IsIntegralType(type))
            {
                if (type == typeof(sbyte))
                {
                    sbyte maxCount = (sbyte.MaxValue < maxName) ? sbyte.MaxValue : (sbyte)maxName;
                    for (sbyte i = 0; i <= maxCount; i++)
                    {
                        if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, i))
                        {
                            return(GenericFlowSwitchHelper.GetString(i, type));
                        }
                    }
                }
                else if (type == typeof(byte))
                {
                    byte maxCount = (byte.MaxValue < maxName) ? byte.MaxValue : (byte)maxName;
                    for (byte i = 0; i <= maxCount; i++)
                    {
                        if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, i))
                        {
                            return(GenericFlowSwitchHelper.GetString(i, type));
                        }
                    }
                }
                else if (type == typeof(char))
                {
                    char maxCount = unchecked ((char)maxName);
                    for (char i = (char)48; i <= maxCount; i++)
                    {
                        if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, i))
                        {
                            return(GenericFlowSwitchHelper.GetString(i, type));
                        }
                    }
                }
                else if (type == typeof(short))
                {
                    short maxCount = (short)maxName;
                    for (short i = 0; i <= maxCount; i++)
                    {
                        if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, i))
                        {
                            return(GenericFlowSwitchHelper.GetString(i, type));
                        }
                    }
                }
                else if (type == typeof(ushort))
                {
                    ushort maxCount = (ushort)maxName;
                    for (ushort i = 0; i <= maxCount; i++)
                    {
                        if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, i))
                        {
                            return(GenericFlowSwitchHelper.GetString(i, type));
                        }
                    }
                }
                else if (type == typeof(int))
                {
                    for (int i = 0; i <= maxName; i++)
                    {
                        if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, i))
                        {
                            return(GenericFlowSwitchHelper.GetString(i, type));
                        }
                    }
                }
                else if (type == typeof(uint))
                {
                    for (uint i = 0; i <= (uint)maxName; i++)
                    {
                        if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, i))
                        {
                            return(GenericFlowSwitchHelper.GetString(i, type));
                        }
                    }
                }
                else if (type == typeof(long))
                {
                    for (long i = 0; i <= (long)maxName; i++)
                    {
                        if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, i))
                        {
                            return(GenericFlowSwitchHelper.GetString(i, type));
                        }
                    }
                }
                else if (type == typeof(ulong))
                {
                    for (ulong i = 0; i <= (ulong)maxName; i++)
                    {
                        if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, i))
                        {
                            return(GenericFlowSwitchHelper.GetString(i, type));
                        }
                    }
                }
                errorMessage = SR.InvalidFlowSwitchCaseMessage;
                return(string.Empty);
            }
            else if (type.IsEnum)
            {
                Array array = type.GetEnumValues();
                foreach (object value in array)
                {
                    if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, value))
                    {
                        return(GenericFlowSwitchHelper.GetString(value, type));
                    }
                }
                errorMessage = SR.InvalidFlowSwitchCaseMessage;
                return(string.Empty);
            }
            else if (type == typeof(bool))
            {
                if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, true))
                {
                    return(GenericFlowSwitchHelper.GetString(true, type));
                }
                else if (!GenericFlowSwitchHelper.ContainsCaseKey(collection, false))
                {
                    return(GenericFlowSwitchHelper.GetString(false, type));
                }
                errorMessage = SR.InvalidFlowSwitchCaseMessage;
                return(string.Empty);
            }
            return(string.Empty);
        }