我正在尝试运行以下代码,但得到一个转换错误.如何重写我的代码以实现相同的目标?
boolResult= (bool?)dataReader["BOOL_FLAG"] ?? true;
intResult= (int?)dataReader["INT_VALUE"] ?? 0;
Run Code Online (Sandbox Code Playgroud)
谢谢
tay*_*onr 14
在数据读取器上使用"IsDbNull"方法...例如:
bool? result = dataReader.IsDbNull(dataReader["Bool_Flag"]) ? null : (bool)dataReader["Bool_Flag"]
Run Code Online (Sandbox Code Playgroud)
编辑
你需要做类似的事情:布尔?nullBoolean = null;
你有
bool? result = dataReader.IsDbNull(dataReader["Bool_Flag"]) ? nullBoolean : (bool)dataReader["Bool_Flag"]
Run Code Online (Sandbox Code Playgroud)
Gio*_*lbo 10
考虑在一个函数中执行它.
这是我过去使用过的东西(你可以在.net 4中将其作为扩展方法):
public static T GetValueOrDefault<T>(SqlDataReader dataReader, System.Enum columnIndex)
{
int index = Convert.ToInt32(columnIndex);
return !dataReader.IsDBNull(index) ? (T)dataReader.GetValue(index) : default(T);
}
Run Code Online (Sandbox Code Playgroud)
编辑
作为扩展(未经测试,但您明白了),并使用列名而不是索引:
public static T GetValueOrDefault<T>(this SqlDataReader dataReader, string columnName)
{
return !dataReader.IsDBNull(dataReader[columnName]) ? (T)dataReader.GetValue(dataReader[columnName]) : default(T);
}
Run Code Online (Sandbox Code Playgroud)
用法:
bool? flag = dataReader.GetValueOrDefault("BOOL_COLUMN");
Run Code Online (Sandbox Code Playgroud)
这里有一个可能有用的答案:https : //stackoverflow.com/a/3308515/1255900
您可以使用“as”关键字。请注意评论中提到的注意事项。
nullableBoolResult = dataReader["BOOL_FLAG"] as bool?;
Run Code Online (Sandbox Code Playgroud)
或者,如果您没有使用可空值,如您原来的帖子所示:
boolResult = (dataReader["BOOL_FLAG"] as bool?) ?? 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14687 次 |
| 最近记录: |