如何使用c#从字符串列表中获取状态



我正在处理一个应用程序,其中我有一个状态列表,如提交,批准和拒绝。在我的场景中,当所有法规都批准时然后我必须返回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));

最新更新