在下面的代码中,我得到colType了该类型的代码.但是,我如何将该数字转换为实际类型?谢谢!!
for (int j = 0; j < dvColumns.Count; j++)
{
// Get the name of the column.
drvCols = dvColumns[j];
colName = drvCols.Row.ItemArray[3].ToString();
// Get columns data type code and save it off.
colType = Convert.ToInt32(drvCols.Row.ItemArray[11]);
}
Run Code Online (Sandbox Code Playgroud)
sch*_*tbi 21
它甚至更简单:
Type type = Type.GetType("System." + colType);
Run Code Online (Sandbox Code Playgroud)
如果要将值转换为该类型,可以直接使用typecode
Convert.ChangeType(value, colType);
Run Code Online (Sandbox Code Playgroud)
cwi*_*lls 11
使用switch语句:
public static Type ToType(this TypeCode code)
{
switch (code)
{
case TypeCode.Boolean:
return typeof(bool);
case TypeCode.Byte:
return typeof(byte);
case TypeCode.Char:
return typeof(char);
case TypeCode.DateTime:
return typeof(DateTime);
case TypeCode.DBNull:
return typeof(DBNull);
case TypeCode.Decimal:
return typeof(decimal);
case TypeCode.Double:
return typeof(double);
case TypeCode.Empty:
return null;
case TypeCode.Int16:
return typeof(short);
case TypeCode.Int32:
return typeof(int);
case TypeCode.Int64:
return typeof(long);
case TypeCode.Object:
return typeof(object);
case TypeCode.SByte:
return typeof(sbyte);
case TypeCode.Single:
return typeof(Single);
case TypeCode.String:
return typeof(string);
case TypeCode.UInt16:
return typeof(UInt16);
case TypeCode.UInt32:
return typeof(UInt32);
case TypeCode.UInt64:
return typeof(UInt64);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我认为没有任何方法可以在 .NET Framework 中本地执行此操作,因为我见过的所有示例都使用大型 switch 语句来处理转换(例如:here)。
但是,如果您尝试获取该类型作为将对象转换为该类型的中间步骤,则始终可以使用接受 a作为参数的Convert.ChangeType 。TypeCode
double d = -1.234;
int i = (int)Convert.ChangeType(d, TypeCode.Int32);
Run Code Online (Sandbox Code Playgroud)
不幸的是,在没有看到你想要做什么的情况下,我真的不能说是否ChangeType有帮助。
编辑:
要将 an 转换int为 a OleDbType,您只需将其转换:
int i = 72; //72 is the value for OleDbType.Guid
if(Enum.IsDefined(typeof(System.Data.OleDb.OleDbType), i))
{
System.Data.OleDb.OleDbType dbType = (System.Data.OleDb.OleDbType)i;
Console.WriteLine(dbType);
}
else
Console.WriteLine("{0} is not defined for System.Data.OleDb.OleDbType", i);
Run Code Online (Sandbox Code Playgroud)