我有很多方法可以执行验证 - tryParse是我使用的主要功能之一。
我最终得到这样的代码:
bool isValid = true;
int dealId;
isValid = !int.TryParse(strArr[0], out dealId) ? false : isValid;
DateTime createdOn;
isValid = !DateTime.TryParse(strArr[1], out createdOn) ? false : isValid;
isValid = !tmp.Add(new BookmarkedDeal(userId, dealId, createdOn)) ? false : isValid;
只有在结果为假的情况下才有更好的方法将isValid设置为false吗?
答案 0 :(得分:2)
这取决于你对“更好”的定义,但你可以这样做:
int dealId;
DateTime createdOn;
return int.TryParse(strArr[0], out dealId) &&
DateTime.TryParse(strArr[1], out createdOn) &&
tmp.Add(new BookmarkedDeal(userId, dealId, createdOn))
(假设你当然是从一个方法返回这个,否则,你可以把它的值设置为bool isValid
并像以前那样使用它)
&&
称为条件AND运算符。基本思想是它只会进行足够的评估,以确定返回的值是否满足条件。首先,它将检查int.TryParse()
是否返回true,如果是,则检查DateTime.TryParse()
,然后检查以下方法是否返回true。这个运算符的优点是,如果有任何失败,那么它知道它不可能是真的并立即返回错误。
(还有一个条件OR运算符(||
)以相同的方式运行,但是如果只计算得到公平,直到它达到true
,从而使整个表达式为真。 / p>
答案 1 :(得分:1)
int dealId;
DateTime createdOn;
bool isValid = int.TryParse(strArr[0], out dealId)
&&
DateTime.TryParse(strArr[1], out createdOn)
&&
tmp.Add(new BookmarkedDeal(userId, dealId, createdOn));
(在上面的陈述中会发生短路,即一旦一个术语评估为假就停止评估)
此外,您可以订购验证,以便最有可能失败的事情首先......然后您可以通过不探索其他路径来更快地执行验证。 (过早优化的一个很好的例子......但如果每个术语可能需要一段时间才能执行,那么值得记住)。
=============================================== =================================
执行此操作的两种替代方法,即评估每个术语和记录isValid = false,如果任何评估为假。
(将“&& isValid”放在表达式的右侧非常重要,以避免在前一个isValid为false时发生短路。)
int dealId;
DateTime createdOn;
bool isValid = int.TryParse(strArr[0], out dealId);
isValid = DateTime.TryParse(strArr[1], out createdOn) && isValid;
isValid = tmp.Add(new BookmarkedDeal(userId, dealId, createdOn)) && isValid;
int dealId;
DateTime createdOn;
bool isValid = int.TryParse(strArr[0], out dealId)
&
DateTime.TryParse(strArr[1], out createdOn)
&
tmp.Add(new BookmarkedDeal(userId, dealId, createdOn));
答案 2 :(得分:1)
这个怎么样:
int dealId;
DateTime createdOn;
bool isValid = int.TryParse(strArr[0], out dealId) &&
DateTime.TryParse(strArr[1], out createdOn) &&
tmp.Add(new BookmarkedDeal(userId, dealId, createdOn)
As&&从左到右执行,从先前调用中检索的变量将准备好进行下一次调用。
答案 3 :(得分:-1)
这是您可以采用的另一种方式。我不确定传递params的开销会给系统造成什么损失,所以为什么不抓住错误呢?
bool isValid;
try
{
int dealID = int.Parse(strArr[0]);
DateTime createdOn = DateTime.Parse(strArry[1]);
tmp.Add(new BookmarkedDeal(userId, dealId, createdOn);
isValid = true;
}
catch
{
isValid = false;
}