我的对象通常具有可用作SQL命令参数的可空类型属性。
我接下来初始化它们:
public int? Amount
{
get
{
int i;
int? amount = null;
if (Int32.TryParse(Request["amount"], out i))
{
amount = i;
}
return amount;
}
}
command.Parameters.Add("@amount").Value = (object)this.Amount ?? DbNull.Value;
如何重写这些初始化代码以缩短或更快?
答案 0 :(得分:8)
首先,不要这样做;你正默默地放弃你无法解析数据的事实!最好在这种情况下抛出异常,或处理预期方案(例如null
)。
string val = Request["amount"];
return string.IsNullOrEmpty(val) ? (int?)null : (int?)int.Parse(val);
答案 1 :(得分:3)
1)更短!=更快。重要的是要注意。
2)这也会起作用:
public int? Amount
{
get
{
int i;
if (Int32.TryParse(Request["amount"], out i))
{
return i;
}
return null;
}
}
答案 2 :(得分:0)
我喜欢稍微改写一下Randolpho和Marc的代码:
return Int32.TryParse(Request["amount"], out i)) ? (int?)i : (int?)null;
答案 3 :(得分:0)
除非您的来电者要求Nullable<T>
,否则我建议您使用以下类型:
struct MaybeValid<T>
{
public bool IsValid;
public T Value;
}
这将允许:
Public MaybeValid<int> Amount
{
Amount.Value = Int32.TryParse(out Amount.IsValid);
}
使用Int32
,额外的类型转换工作可能不是太大的问题,但对于更大的类型,它可能更重要。
答案 4 :(得分:-5)
public int? Amount
{
get
{
try
{
return Int.Parse(Request["amount"]);
}
catch (exception e)
{
return null;
}
}
{
性能并没有真正改变,但如果你真的想要优化,那么你需要考虑什么是最常见的,如果值几乎总是有效的整数,那么我的方法可能是最好的,如果不是那么你的方法是最好的。