对于某些上下文,记录类SaleAmount属性是
public decimal? SaleAmount
{
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会这样做
record.SaleAmount.Value =
sql.Reader.IsDBNull(IDX_SALEAMOUNT) ? null :
sql.Reader.GetDecimal(IDX_SALEAMOUNT);
Run Code Online (Sandbox Code Playgroud)
唉编译器,这不是朋友,因为......
无法确定条件表达式的类型,因为''和'decimal'之间没有隐式转换
那么你如何优雅地表达这一点,并且不要像下面那样玩明显的卡片......
if (!sql.Reader.IsDBNull(IDX_SALEAMOUNT))
record.SaleAmount = sql.Reader.GetDecimal(IDX_SALEAMOUNT);
Run Code Online (Sandbox Code Playgroud)
或者是最佳解决方案?
Jon*_*eet 13
如果您使用的是C#3,我实际上使用扩展方法可以让您更轻松:
public static decimal? GetNullableDecimal(this DbReader reader,
int column)
{
return reader.IsDBNull(column) ? (decimal?) null :
reader.GetDecimal(column);
}
Run Code Online (Sandbox Code Playgroud)
然后您的应用程序代码可以使用:
record.SaleAmount = sql.Reader.GetNullableDecimal(IDX_SALEAMOUNT);
Run Code Online (Sandbox Code Playgroud)