从List <string> </string>创建用户可读,易于显示的格式化字符串

时间:2012-09-25 19:14:15

标签: c# string

我知道有几个问题asked and answered有关如何从列表中创建逗号分隔字符串的问题。我正在寻找一些略有不同的帮助。

我想要做的是从List<string>创建一个易于显示的人类可读字符串,其内容类似于“A,B和C是无效值”。字符串的语法和格式应根据列表中的项目数进行更改。该列表可以包含任意数量的项目。

例如:

List<string> myString = new List<string>() { "Scooby", "Dooby", "Doo" };
// Should return "Scooby, Dooby and Doo are invalid values."

List<string> myString = new List<string>() { "Scooby", "Dooby" };
// Should return "Scooby and Dooby are invalid values."

List<string> myString = new List<string>() { "Scooby" };
// Should return "Scooby is an invalid value."

以下是我到目前为止所做的事情:

string userMessage = "";
foreach(string invalidValue in invalidValues)
{
  userMessage = " " + userMessage + invalidValue + ",";
}

// Remove the trailing comma
userMessage = userMessage.Substring(0, userMessage.LastIndexOf(','));

if (invalidValues.Count > 1)
{
  int lastCommaLocation = userMessage.LastIndexOf(',');
  userMessage = userMessage.Substring(0, lastCommaLocation) + " and " + userMessage.Substring(lastCommaLocation + 1) + " are invalid values.";
}
else 
{
  userMessage = userMessage + " is an invalid value.";
}

有更好或更有效的方法吗?

2 个答案:

答案 0 :(得分:8)

public static string FormatList(List<string> invalidItems)
{
    if(invalidItems.Count == 0) return string.Empty;
    else if(invalidItems.Count == 1) return string.Format("{0} is an invalid value", invalidItems[0]);
    else return string.Format("{0} and {1} are invalid values", string.Join(", ", invalidItems.Take(invalidItems.Count - 1)), invalidItems.Last());
}

答案 1 :(得分:0)

在他的另一个回答中,他很感激@Lee,这是他方法的扩展版本。它允许您指定开始文本和/或结束文本,并使用牛津逗号,众所周知,遗漏曾经在诉讼中对原告造成灾难性的后果……但如果您讨厌糟糕的事情,您可以按照书面说明将其从方法中删除。

v.target.value.split(",")

可能有一种更好的,不太冗长的方法来执行相同的操作,但这对我有用,并且很难与结果争论。其实我猜这里不是,但是仍然...无论如何,欢迎任何有志于改善这一点的人。