Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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#_Extension Methods_Dbnull - Fatal编程技术网

C# 处理数据库值的扩展方法

C# 处理数据库值的扩展方法,c#,extension-methods,dbnull,C#,Extension Methods,Dbnull,我发现自己正在从各种SQL对象(DataTable、SqlReader)读取数据,并将其分配给自己的自定义对象。通常情况下,我无法确定从数据库检索的数据是否为null或包含有效数据。虽然我将对象属性设置为空,但仍然无法将对象值指定给整数属性 public int? ClientId{ get; set; } this.ClientId = clientTable.Rows[0]["ID"]; 在上述情况下,我无法将clientTable.Rows[0][“ID”]强制转换为int,因为该值可能

我发现自己正在从各种SQL对象(DataTable、SqlReader)读取数据,并将其分配给自己的自定义对象。通常情况下,我无法确定从数据库检索的数据是否为null或包含有效数据。虽然我将对象属性设置为空,但仍然无法将对象值指定给整数属性

public int? ClientId{ get; set; }
this.ClientId = clientTable.Rows[0]["ID"];
在上述情况下,我无法将
clientTable.Rows[0][“ID”]
强制转换为
int
,因为该值可能是
null

this.ClientId = (int)clientTable.Rows[0]["ID"]; // WARNING! value could be null
所以我认为一个扩展方法将是一个好主意(我从

使用…调用扩展方法

this.ClientId = clientTable.Rows[0].GetIntFromDB("ID");

问题是扩展方法总是返回一个整数。有没有办法将空值返回到对象属性?

当然,只需让方法返回
int?
而不是
int
。见鬼,那就更简单了:

public static int? GetIntFromDB(this DataRow row, string columnName)
{
    return row[columnName] as int?;
}
不过,我个人的做法略有不同,以避免掩盖从不同字段类型请求
int
的地方:

public static int? GetInt32FromDB(this DataRow row, string columnName)
{
    return row.IsNull(columnName) ? (int?) null : (int) row[columnName];
}

当然,只需让方法返回
int?
而不是
int
。见鬼,那就更简单了:

public static int? GetIntFromDB(this DataRow row, string columnName)
{
    return row[columnName] as int?;
}
不过,我个人的做法略有不同,以避免掩盖从不同字段类型请求
int
的地方:

public static int? GetInt32FromDB(this DataRow row, string columnName)
{
    return row.IsNull(columnName) ? (int?) null : (int) row[columnName];
}

扩展方法中的代码将始终返回一个整数,因为您正在使用合并运算符“?”来提供默认(int)值。如果希望它返回null,只需删除操作符右侧的默认值(int)

公共静态int?GetIntFromDB(此数据行,字符串列名称)
{
将行[columnName]返回为int?;
}


扩展方法中的代码将始终返回一个整数,因为您正在使用合并运算符“?”来提供默认(int)值。如果希望它返回null,只需删除操作符右侧的默认值(int)

公共静态int?GetIntFromDB(此数据行,字符串列名称)
{
将行[columnName]返回为int?;
}


您需要返回
int?
然后…您需要返回
int?
然后。。。