コード例 #1
0
        public static void Main()
        {
            // equivalent to TypeConvert.Default.ChangeType
            object value = TypeConvert.ChangeType("1.5", typeof(double));

            Console.WriteLine(value + " " + value.GetType().Name);             // 1.5 Double

            Func <object, object> converter = TypeConvert.GetConverter(typeof(string), typeof(char));

            value = converter("c");
            Console.WriteLine(value + " " + value.GetType().Name);             // c char
            value = converter("5");
            Console.WriteLine(value + " " + value.GetType().Name);             // 5 char

            // prevents numeric overflow
            value = ((long)int.MaxValue) + 1;
            bool success = TypeConvert.Default.TryChangeType(value, typeof(int), out object result);

            Console.WriteLine(success + " " + (result ?? "null"));             // False null

            // Enum conversions are case sensitive
            value = TypeConvert.Default.ChangeType(DayOfWeek.Friday.ToString(), typeof(DayOfWeek));
            Console.WriteLine(value + " " + value.GetType().Name);             // Friday DayOfWeek

            value = TypeConvert.ChangeType("1", typeof(BigInteger));
            Console.WriteLine(value + " " + value.GetType().Name);             // 1 BigInteger

            Console.ReadKey();
        }
コード例 #2
0
        /// <summary>
        /// This method is used by SetValue or by outside
        /// </summary>
        /// <param name="fieldName"></param>
        /// <param name="value"></param>
        /// <param name="clean"></param>
        internal void SetValueWithFlag(string fieldName, object value, bool clean)
        {
            if (!_metadata.ContainsField(fieldName))
            {
                throw new ArgumentException("The field name does not exist", "fieldName");
            }
            string lowerName = fieldName.ToLower();
            Type   destType  = DataTypeConvert.ToSysType(_metadata[fieldName].DataType, _metadata[fieldName].Nullable);

            value = TypeConvert.ChangeType(value, destType);
            object oldValue = null;

            _fieldValues.TryGetValue(lowerName, out oldValue);
            bool changed = oldValue != value;

            if (changed)
            {
                if (clean)
                {
                    _fieldValues[lowerName] = value;
                }
                else
                {
                    _dirtyValues[lowerName] = value;
                    ReportFieldChanged(fieldName, value);
                }
            }
        }
コード例 #3
0
 public void TestBoolean()
 {
     for (int i = 0; i < NumericTypes.Length; i++)
     {
         Type   type = NumericTypes[i];
         object val  = TypeConvert.ChangeType(true, type);
         Assert.IsNotNull(val);
         Type resultTy = val.GetType();
         Assert.AreEqual(type, resultTy);
         val = TypeConvert.ChangeType(false, type);
         Assert.IsNotNull(val);
         resultTy = val.GetType();
         Assert.AreEqual(type, resultTy);
     }
     for (int i = 0; i < OneValues.Length; i++)
     {
         object oneVal = OneValues[i];
         object val    = TypeConvert.ChangeType(oneVal, typeof(bool));
         Assert.IsNotNull(val);
         Type type = val.GetType();
         Assert.AreEqual(type, typeof(bool));
     }
     for (int i = 0; i < ZeroValues.Length; i++)
     {
         object zeroVal = ZeroValues[i];
         object val     = TypeConvert.ChangeType(zeroVal, typeof(bool));
         Assert.IsNotNull(val);
         Type type = val.GetType();
         Assert.AreEqual(type, typeof(bool));
     }
 }
コード例 #4
0
 public void ToSelf()
 {
     foreach (Type type in ParseTypes.Where(t => !t.IsClass))
     {
         object value  = Activator.CreateInstance(type);
         object result = TypeConvert.ChangeType(value, type);
         Assert.AreEqual(result, value);
         Assert.AreEqual(result.GetType(), value.GetType());
     }
 }
コード例 #5
0
        public T GetValue <T>(string fieldName)
        {
            string textValue = GetValue(fieldName);

            if (textValue == null)
            {
                return(default(T));
            }
            else
            {
                return((T)TypeConvert.ChangeType(textValue, typeof(T)));
            }
        }
コード例 #6
0
        static public void WriteDCToEntity(ExtensibleDC dc, ExtensibleEntity entity)
        {
            EntityMetadata entityMetadata = ExtensibleEntity.GetEntityMetadata(entity.GetType());

            FieldMetadata[] fields = entityMetadata.Fields;
            for (int i = 0; i < fields.Length; i++)
            {
                //if (string.Compare(fields[i].Name, entityMetadata.Key, true) == 0)//skip the key fields
                //   continue;
                if (!dc.Contains(fields[i].Name))
                {
                    continue;
                }
                FieldMetadata field = fields[i];
                object        value = TypeConvert.ChangeType(dc.GetValue(field.Name), DataTypeConvert.ToSysType(field.DataType, field.Nullable));
                entity.SetValue(field.Name, value);
            }
        }
コード例 #7
0
 public void TestNumericsConvert()
 {
     for (int i = 0; i < ZeroValues.Length; i++)
     {
         object zeroVal = ZeroValues[i];
         object oneVal  = OneValues[i];
         foreach (Type type in NumericTypes)
         {
             object result      = TypeConvert.ChangeType(zeroVal, type);
             Type   zeroValType = zeroVal.GetType();
             Type   resultType  = result?.GetType();
             Assert.IsNotNull(result);
             Assert.AreEqual(type, resultType);
             object result2 = TypeConvert.ChangeType(oneVal, type);
             Assert.IsNotNull(result2);
             Assert.AreEqual(type, result2.GetType());
             Assert.IsTrue(result.ToString() == "0" || result.ToString() == "0.0");
             Assert.IsTrue(result2.ToString() == "1" || result2.ToString() == "1.0");
         }
     }
 }
コード例 #8
0
 public void TestParse()
 {
     for (int i = ParseTypes.ToList().IndexOf(typeof(DateTime)); i < ParseTypes.Length; i++)
     {
         string str    = ParseValues[i].ToString();
         Type   type   = ParseTypes[i];
         object result = TypeConvert.ChangeType(str, type);
         Assert.IsTrue(result != null);
         Assert.AreEqual(str, result.ToString());
         // Custom Booleans
     }
     for (int i = 0; i < MaxValues.Length; i++)
     {
         object maxVal  = MaxValues[i];
         object minVal  = MinValues[i];
         object zeroVal = ZeroValues[i];
         object oneVal  = OneValues[i];
         Assert.AreEqual(TypeConvert.ChangeType(maxVal.ToString(), maxVal.GetType()).ToString(), maxVal.ToString());
         Assert.AreEqual(TypeConvert.ChangeType(minVal.ToString(), minVal.GetType()).ToString(), minVal.ToString());
         Assert.AreEqual(TypeConvert.ChangeType(zeroVal.ToString(), zeroVal.GetType()), zeroVal);
         Assert.AreEqual(TypeConvert.ChangeType(oneVal.ToString(), oneVal.GetType()), oneVal);
     }
 }
コード例 #9
0
 public void TestChar()
 {
     for (int i = 0; i < NumericTypes.Length - 3; i++)
     {
         // do not use float, double, decimal
         Type type = NumericTypes[i];
         if (type == typeof(float) || type == typeof(decimal) || type == typeof(double))
         {
             continue;
         }
         object val = TypeConvert.ChangeType((char)5, type);
         Assert.IsNotNull(val);
         Type resultTy = val.GetType();
         Assert.AreEqual(type, resultTy);
         val = TypeConvert.ChangeType((char)0, type);
         Assert.IsNotNull(val);
         resultTy = val.GetType();
         Assert.AreEqual(type, resultTy);
     }
     for (int i = 0; i < OneValues.Length - 3; i++)
     {
         object oneVal = OneValues[i];
         object val    = TypeConvert.ChangeType(oneVal, typeof(char));
         Assert.IsNotNull(val);
         Type type = val.GetType();
         Assert.AreEqual(type, typeof(char));
     }
     for (int i = 0; i < ZeroValues.Length - 3; i++)
     {
         object zeroVal = ZeroValues[i];
         object val     = TypeConvert.ChangeType(zeroVal, typeof(char));
         Assert.IsNotNull(val);
         Type type = val.GetType();
         Assert.AreEqual(type, typeof(char));
     }
 }
コード例 #10
0
ファイル: DataNode.cs プロジェクト: penzhaohui/Crab
        public void SetPropertyValue <T>(int propType, T value)
        {
            string textValue = (string)TypeConvert.ChangeType <string>(value);

            SetPropertyValue(propType, textValue);
        }
コード例 #11
0
ファイル: DataNode.cs プロジェクト: penzhaohui/Crab
        public T GetPropertyValue <T>(int propType)
        {
            string textValue = GetPropertyValue(propType);

            return(TypeConvert.ChangeType <T>(textValue));
        }
コード例 #12
0
        protected IEnumerable <string> GenerateInsertScripts(IExtDataRecord dataRow, EntityMetadata rowMetaData)
        {
            List <string> scripts = new List <string>();

            FieldMetadata[] preDefFields = rowMetaData.PreDefinedFields;
            FieldMetadata[] extFields    = rowMetaData.ExtensionFields;

            StringBuilder sb = new StringBuilder();

            sb.Append("INSERT INTO ").Append(rowMetaData.SourceName).Append(" ( ");
            bool addFlag = false;

            for (int i = 0; i < preDefFields.Length; i++)
            {
                object value = null;
                if (!dataRow.TryGetValue(preDefFields[i].Name, out value))
                {
                    continue; //value not exists. Insert the least values
                }
                if (addFlag)
                {
                    sb.Append(", ");
                }
                sb.Append(preDefFields[i].ColumnName);
                addFlag = true;
            }
            sb.Append(") VALUES ( ");
            addFlag = false;
            for (int i = 0; i < preDefFields.Length; i++)
            {
                object value = null;
                if (!dataRow.TryGetValue(preDefFields[i].Name, out value))
                {
                    continue; //value not exists. Insert the least values
                }
                if (addFlag)
                {
                    sb.Append(", ");
                }
                sb.Append(SqlFormat.ToSqlValueString(value));
                addFlag = true;
            }
            sb.Append(")");
            scripts.Add(sb.ToString());
            if (extFields == null || extFields.Length == 0)
            {
                return(scripts);
            }
            string recordIdStringValue = SqlFormat.ToSqlValueString(dataRow.GetValue(rowMetaData.Key));
            string extensionTable      = string.IsNullOrEmpty(rowMetaData.ExtensionTable) ? Consts.DefExtensionTable : rowMetaData.ExtensionTable;

            foreach (FieldMetadata extField in extFields)
            {
                object value = null;
                if (!dataRow.TryGetValue(extField.Name, out value))
                {
                    continue;
                }
                value = TypeConvert.ChangeType <string>(value);
                sb    = new StringBuilder();
                sb.Append("INSERT INTO ").Append(extensionTable).
                Append("(RecordId, FieldId, Value) VALUES (").Append(recordIdStringValue).
                Append(",").Append(SqlFormat.ToSqlValueString(extField.Id)).
                Append(",").Append(SqlFormat.ToSqlValueString(value)).Append(")");
                scripts.Add(sb.ToString());
            }
            return(scripts);
        }
コード例 #13
0
        protected IEnumerable <string> GenerateUpdateScripts(IExtDataRecord dataRow, EntityMetadata rowMetaData, IEnumerable <string> dirtyFields)
        {
            List <string> scripts           = new List <string>();
            List <string> preDefDirtyFields = new List <string>();
            List <string> extDirtyFields    = new List <string>();

            foreach (string dirtyField in dirtyFields)
            {
                if (!rowMetaData.ContainsField(dirtyField))
                {
                    continue;
                }
                if (!rowMetaData[dirtyField].IsExtension)
                {
                    preDefDirtyFields.Add(dirtyField);
                }
                else
                {
                    extDirtyFields.Add(dirtyField);
                }
            }
            //update predefined fields
            if (preDefDirtyFields.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("UPDATE ").Append(rowMetaData.SourceName).Append(" SET ");
                for (int i = 0; i < preDefDirtyFields.Count; i++)
                {
                    sb.Append(preDefDirtyFields[i]).Append(" = ").
                    Append(SqlFormat.ToSqlValueString(dataRow.GetValue(preDefDirtyFields[i])));
                    if (i != preDefDirtyFields.Count - 1)
                    {
                        sb.Append(", ");
                    }
                }
                sb.Append(" WHERE ").Append(GetConditionClause(dataRow, rowMetaData.KeyFieldNames));
                scripts.Add(sb.ToString());
            }

            //uppdate extension values
            if (extDirtyFields.Count > 0)
            {
                string recordIdStringValue = SqlFormat.ToSqlValueString(dataRow.GetValue(rowMetaData.Key));
                string extensionTable      = string.IsNullOrEmpty(rowMetaData.ExtensionTable) ? Consts.DefExtensionTable : rowMetaData.ExtensionTable;
                foreach (string extFieldName in extDirtyFields)
                {
                    object value = dataRow.GetValue(extFieldName);
                    value = TypeConvert.ChangeType <string>(value);
                    StringBuilder sb = new StringBuilder();
                    sb.Append("DELETE FROM ").Append(extensionTable).
                    Append(" WHERE RecordId=").Append(recordIdStringValue).
                    Append(" AND FieldId=").Append(SqlFormat.ToSqlValueString(rowMetaData[extFieldName].Id));
                    scripts.Add(sb.ToString());
                    sb = new StringBuilder();
                    sb.Append("INSERT INTO ").Append(extensionTable).
                    Append("(RecordId, FieldId, Value ) VALUES (").Append(recordIdStringValue).
                    Append(",").Append(SqlFormat.ToSqlValueString(rowMetaData[extFieldName].Id)).
                    Append(",").Append(SqlFormat.ToSqlValueString(value)).Append(")");
                    scripts.Add(sb.ToString());
                }
            }
            //updates extension fields
            return(scripts);
        }