Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理数据类型转换的泛型函数_C#_Mysql_Type Conversion - Fatal编程技术网

C# 处理数据类型转换的泛型函数

C# 处理数据类型转换的泛型函数,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; }

我在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;
}
但是,在本例中,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));