Abe*_*ler 20 .net c# null-coalescing-operator
如果我有类似以下的代码:
while(myDataReader.Read())
{
myObject.intVal = Convert.ToInt32(myDataReader["mycolumn"] ?? 0);
}
Run Code Online (Sandbox Code Playgroud)
它抛出错误:
无法将对象从DBNull强制转换为其他类型.
定义intVal为可空int不是一个选项.有没有办法让我做到以上几点?
Edy*_*dyn 16
这是另一个选择:
while (myDataReader.Read())
{
myObject.intVal = (myDataReader["mycolumn"] as int? ?? 0);
}
Run Code Online (Sandbox Code Playgroud)
Bry*_*her 14
你能用扩展方法吗?(写在我的头顶)
public static class DataReaderExtensions
{
public static T Read<T>(this SqlDataReader reader, string column, T defaultValue = default(T))
{
var value = reader[column];
return (T)((DBNull.Value.Equals(value))
? defaultValue
: Convert.ChangeType(value, typeof(T)));
}
}
Run Code Online (Sandbox Code Playgroud)
你会像以下一样使用它:
while(myDataReader.Read())
{
int i = myDataReader.Read<int>("mycolumn", 0);
}
Run Code Online (Sandbox Code Playgroud)
你能简单地使用Int32.Tryparse吗?
int number;
bool result = Int32.TryParse(myDataReader["mycolumn"].ToString(), out number);
Run Code Online (Sandbox Code Playgroud)
根据MSDN,number如果转换失败,将包含0
怎么样的:
object x = DBNull.Value;
int y = (x as Int32?).GetValueOrDefault(); //This will be 0
Run Code Online (Sandbox Code Playgroud)
或者在你的情况下:
int i = (myDataReader["mycolumn"] as Int32?).GetValueOrDefault();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5839 次 |
| 最近记录: |