以下代码显示最近日期的状态。它比较第一个日期是否是第二个日期,依此类推。但我有一个问题。如果第一个日期和第二个日期相同怎么办?
例如,第一个日期是2013-04-15(a_mm_date),第二个日期是2013-04-15(a_uat_date)。 a_mp_date为null所以没关系。所以它是这样的:a_mm_date - > a_mp_date - > a_uat_date。系统将显示状态为“FOR APPROVAL MM”。但是应该显示“IN PROCESS UAT”作为状态而不是FOR APPROVAL MM。
任何想法如何做到这一点?
//Get values if the status is A
if (data.s == "A")
{
if (data.a_mm_date >= data.a_mp_date && data.a_mm_date >= data.a_uat_date)
{
data.s = "For Approval MM";
}
if (data.a_mp_date >= data.a_mm_date && data.a_mp_date >= data.a_uat_date)
{
data.s = "For Approval MP";
}
if (data.a_uat_date >= data.a_mp_date && data.a_uat_date >= data.a_mm_date)
{
data.s = "In Process UAT";
}
}
答案 0 :(得分:1)
我发现您的问题难以理解,但我怀疑最简单的方法就是使用else
:
if (...)
{
data.s = "For approval MM";
}
else if (...)
{
data.s = "For approval MP";
}
else if (...)
{
data.s = "For approval UAT";
}
else
{
// Whatever you want if none of the above is met
}
然后我将其提取到一个单独的方法中,这将阻止您需要重复data
部分16次:
if (data.s == "A")
{
data.s = ComputeNewApproval(data.a_mm_date, data.a_mp_date,
data.data.a_uat_date);
}
...
private static string ComputeNewApproval(DateTime mmDate, DateTime mpDate,
DateTime uatDate)
{
...
}
(如果需要,请将它们DateTime?
。)
然后我将属性的名称更改为更常规 - 如果s
表示状态,则创建属性Status
...并理想地删除下划线,将MM,MP和UAT扩展为更有意义的名称。 (我猜UAT是用户验收测试,但我不知道MM和MP是什么。)
答案 1 :(得分:0)
最后一次if
测试:
if (2013-04-15 >= null && 2013-04-15 >= 2013-04-15)...
所以它是true
您之前可以测试无效。最后一个if
的示例:
if ((data.a_mp_date != null) &&
(data.a_uat_date >= data.a_mp_date && data.a_uat_date >= data.a_mm_date))