Beispiel #1
0
        public static bool TryParse(string data, DataType flag, out SimpleType value)
        {
            try
            {
                switch (flag)
                {
                case DataType.Null:
                    value = new SimpleType(null);
                    break;

                case DataType.Bool:
                    value = new SimpleType(Boolean.Parse(data));
                    break;

                case DataType.Char:
                    value = new SimpleType(Char.Parse(data));
                    break;

                case DataType.Byte:
                    value = new SimpleType(Byte.Parse(data));
                    break;

                case DataType.SByte:
                    value = new SimpleType(SByte.Parse(data));
                    break;

                case DataType.Short:
                    value = new SimpleType(Int16.Parse(data));
                    break;

                case DataType.UShort:
                    value = new SimpleType(UInt16.Parse(data));
                    break;

                case DataType.Int:
                    value = new SimpleType(Int32.Parse(data));
                    break;

                case DataType.UInt:
                    value = new SimpleType(UInt32.Parse(data));
                    break;

                case DataType.Long:
                    value = new SimpleType(Int64.Parse(data));
                    break;

                case DataType.ULong:
                    value = new SimpleType(UInt64.Parse(data));
                    break;

                case DataType.Float:
                    value = new SimpleType(Single.Parse(data));
                    break;

                case DataType.Decimal:
                    value = new SimpleType(Decimal.Parse(data));
                    break;

                case DataType.Double:
                    value = new SimpleType(Double.Parse(data));
                    break;

                case DataType.String:
                    value = new SimpleType(data);
                    break;

                case DataType.DateTime:
                    value = new SimpleType(DateTime.Parse(data));
                    break;

                case DataType.TimeSpan:
                    value = new SimpleType(TimeSpan.Parse(data));
                    break;

                default:
                    value = new SimpleType(null);
                    break;
                }

                return(true);
            }
            catch
            {
                value = new SimpleType(null);
                return(false);
            }
        }
Beispiel #2
0
        public static bool TryParse <T>(this string text, out T value)
        {
            var type = typeof(T);

            if (SimpleType.IsSimpleType(type))
            {
                return(SimpleType.TryParse(text, out value));
            }

            value = default(T);

            if (!type.IsDefined(_ParsableAttribute, false))
            {
                return(false);
            }

            lock (_ParsableTryLock)
            {
                try
                {
                    _ParsableTryParams[1] = type;

                    var tryParse = type.GetMethod("TryParse", _ParsableTryParams);

                    _ParsableTryParams[1] = null;

                    _ParsableTryArgs[0] = text;
                    _ParsableTryArgs[1] = value;

                    var val = false;

                    if (tryParse != null)
                    {
                        val = (bool)tryParse.Invoke(null, _ParsableTryArgs);
                    }

                    value = (T)_ParsableTryArgs[1];

                    _ParsableTryArgs[0] = null;
                    _ParsableTryArgs[1] = null;

                    if (val)
                    {
                        return(true);
                    }
                }
                catch
                {
                    _ParsableTryArgs[0]   = null;
                    _ParsableTryArgs[1]   = null;
                    _ParsableTryParams[1] = null;
                }
            }

            lock (_ParsableLock)
            {
                try
                {
                    var parse = type.GetMethod("Parse", _ParsableParams);

                    _ParsableArgs[0] = text;

                    if (parse != null)
                    {
                        value = (T)parse.Invoke(null, _ParsableArgs);
                    }

                    _ParsableArgs[0] = null;

                    return(true);
                }
                catch
                {
                    _ParsableArgs[0] = null;
                }
            }

            value = default(T);

            return(false);
        }
Beispiel #3
0
 public static object ToObject(SimpleType value)
 {
     return(value.Value);
 }
Beispiel #4
0
        public static string ResolveName(this Type t, params object[] args)
        {
            if (SimpleType.IsSimpleType(t))
            {
                return(FormatName(t.Name));
            }

            if (t.IsAbstract || !t.HasInterface <IEntity>())
            {
                return(FormatName(t.Name));
            }

            if (args.IsNullOrEmpty() ? !t.IsConstructable() : !t.IsConstructable(Type.GetTypeArray(args)))
            {
                return(FormatName(t.Name));
            }

            string value;

            if (_StringCache.TryGetValue(t, out value))
            {
                return(value);
            }

            value = String.Empty;

            var o = t.CreateInstanceSafe <IEntity>(args);

            if (o != null)
            {
                try
                {
                    if (o is Mobile)
                    {
                        value = ((Mobile)o).RawName;
                    }
                    else if (o is Item)
                    {
                        value = ((Item)o).ResolveName();
                    }
                    else
                    {
                        o.GetPropertyValue("Name", out value);
                    }
                }
                catch
                { }
                finally
                {
                    o.Delete();
                }
            }

            if (String.IsNullOrWhiteSpace(value))
            {
                value = FormatName(t.Name);
            }

            if (o == null || args.IsNullOrEmpty())
            {
                _StringCache[t] = value;
            }

            return(value);
        }