从自然角度看,我的意思是:


  item1,ite2,ite3和item4。


我知道您可以使用string.Join用逗号分隔列表,例如


  item1,item2,item3,item4


但是如何制作此类列表?我有一个基本的解决方案:

int countMinusTwo = theEnumerable.Count() - 2;
string.Join(",", theEnumerable.Take(countMinusTwo)) + "and "
    + theEnumerable.Skip(countMinusTwo).First();


但我很确定有一种更好的方法(效率更高)。任何人?谢谢。

最佳答案

您应该计算一次大小并将其存储在变量中。否则,查询(如果不是集合)将每次执行。另外,如果要最后一个项目,Last更具可读性。

string result;
int count = items.Count();
if(count <= 1)
    result = string.Join("", items);
else
{
    result = string.Format("{0} and {1}"
        , string.Join(", ", items.Take(counter - 1))
        , items.Last());
}


如果可读性不太重要,顺序可能会很大:

var builder = new StringBuilder();
int count = items.Count();
int pos = 0;
foreach (var item in items)
{
    pos++;
    bool isLast = pos == count;
    bool nextIsLast = pos == count -1;
    if (isLast)
        builder.Append(item);
    else if(nextIsLast)
        builder.Append(item).Append(" and ");
    else
        builder.Append(item).Append(", ");
}
string result = builder.ToString();

关于c# - 如何制作看起来很自然的 list ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17808543/

10-11 07:39