C# 处理数据类型转换的泛型函数
我在C#中有以下函数,我想传递一个MySQL DataReader值/对象 如果传递的对象的值是DBNull,我需要处理它并返回该数据类型的Null值,例如Null intC# 处理数据类型转换的泛型函数,c#,mysql,type-conversion,C#,Mysql,Type Conversion,我在C#中有以下函数,我想传递一个MySQL DataReader值/对象 如果传递的对象的值是DBNull,我需要处理它并返回该数据类型的Null值,例如Null int 否则,我想将返回的值转换为convert.ToInt32(value)或类似的值。我的职能是 public static T ConvertFromDB<T>(object value) { return value == DBNull.Value ? default(T) : (T)value; }
否则,我想将返回的值转换为convert.ToInt32(value)或类似的值。我的职能是
public static T ConvertFromDB<T>(object value)
{
return value == DBNull.Value ? default(T) : (T)value;
}
但是,在本例中,oRes[“FieldName”]的MySQLDataReader结果为DBNull,这会导致异常
有人能在这方面提供帮助吗?我使用的是强类型列,但我遇到的问题是,如果DB值为DBNull,我需要返回该数据类型的null,例如(int)null也许您正在寻找
注意,当转换失败时,您将不得不处理异常,这使得像这样的扩展方法变得可疑
也就是说,如果您正在阅读强类型列,它们应该已经是您想要的格式。为什么不直接使用(或类似)?如果是因为您想使用
SqlDataReader
的索引运算符按名称引用DB列,那么最好使用一组扩展方法来添加重载并在其中调用GetOrdinal()
。有些人可能会争辩说,这表明存在其他代码气味。“否则,我想将返回值转换为convert.ToInt32(value)或类似值。”-为什么?为什么演员阵容不适合你?无论如何,我希望从数据读取器中获取的值在执行时是正确的类型。如果你真的将数字存储为字符串等,我会改变这一点,或者显式地解析它们。@JonSkeet有时存储在db中的整数是short
,从C#code转换为int
(假设这是他想要的),会导致无效的转换异常Convert.ToInt32
在那里工作正常。@Jonsket我遇到的问题是使用Convert.ToInt32(值)时,如果值为NULL,我会得到“数据为NULL。不能对NULL值调用此方法或属性。”@纳法尔:但在这种情况下,您可以使用ConvertFromDB
,让隐式转换工作,将值赋给int
变量或其他任何变量。@Tommo1977:我的问题是为什么您需要使用Convert.ToInt32
。@afrazier如果我尝试使用SqlDataReader.GetInt32()例如,当数据库返回NULL时,我得到“Data is NULL。不能对NULL值调用此方法或属性”。当调用ConvertFromDB(oRes[“FieldName”])等包含返回值==DBNull.value的方法时,这个答案有效?默认值(T):(T)Convert.ChangeType(value,typeof(T));
int MyInt = ConvertFromDB(oRes["FieldName"]);
return value == DBNull.Value ? default(T) : (T) Convert.ChangeType(value, typeof(T));