我正在处理一个应用程序,其中我有一个状态列表,如提交,批准和拒绝。在我的场景中,当所有法规都批准时然后我必须返回Approved但是如果有一条记录是Rejected则返回已拒绝。如果存在状态为Submitted的记录另外两个是Approved然后返回Submitted。我已经实现了一个简单的检查基础逻辑,但我需要使它更好的最佳实践和更通用。
List<string> statuses = new List<string>() { "Approved", "Approved", "Approved" };
var res = statuses.Where(x => x == "Approved").ToList();
if (res.Count() == statuses.Count())
{
Console.WriteLine("Approved");
}
if (res.Where(x => x == "Rejected").Count() > 0)
{
Console.WriteLine("Rejected");
}
else
{
Console.WriteLine("Submitted");
}
我怎样才能做到这一点并提高我的逻辑?
List<string> statuses = new List<string>() { "Approved", "Approved", "Submitted" };
if (statuses.All(x => x == "Approved"))
{
System.Console.WriteLine("Approved");
}
else
{
if (statuses.Any(x => x == "Rejected"))
{
System.Console.WriteLine("Rejected");
}
else
{
System.Console.WriteLine("Submitted");
}
}
您可以这样简化逻辑:
有一个计算状态的函数:
private static string GetStatus(List<string> statuses)
{
if (statuses.Any(x => x == "Rejected")) return "Rejected";
if (statuses.All(x => x == "Approved")) return "Approved";
return "Submitted";
}
这样写:
Console.WriteLine(GetStatus(statuses));
所以我们有一个清晰的命令
Approved < Submitted < Rejected
,我们想找出的最大值:
- 如果我们至少有一个
Rejected
我们返回Rejected
- 如果没有
Rejected
但至少有一个Submitted
则返回Submitted
- 当且仅当所有项为
Approved
时返回
Approved
可以写成
var result = statuses.MaxBy(item => Array.IndexOf(
new [] { "Approved", "Submitted", "Rejected" }, item));