3

如果我有一个IEnumerable,这是我创建一个吐出逗号分隔值的 ToString 方法的最干净的方法吗?

   var enumOfObjects = myEnumerable as IList<object> ?? myEnumerable.Cast<object>().ToList();
   var enumOfStrings = enumOfObjects.Select(x => x.ToString());
   var finalString = String.Join(",", enumOfStrings);

或者,foreach 循环会更好吗?还是有更清洁的方法来做到这一点?

4

2 回答 2

2

以下更短(并且可能被认为更清洁):

enumOfObjects.Aggregate((a,b) => a+","+b))

看起来像:

IEnumerable<object> enumOfObjects = new List<object> {1, "Cat", 3, 4};
Console.WriteLine(enumOfObjects.Aggregate((a,b) => a+","+b));
//outputs 1,Cat,3,4

如果您确实想将其用作字符串,则需要调用ToString()它或将其转换为字符串。

于 2013-06-21T03:46:38.333 回答
1

由于您的代码似乎已经可以工作,您可以将您的代码变成一个扩展方法以便于重用:

public static class EnumerableExtensions
{
    public static string ToCommaSeparatedList(this IEnumerable enumerable)
    {
        var enumOfObjects = myEnumerable as IList<object> ?? myEnumerable.Cast<object>().ToList();
        var enumOfStrings = enumOfObjects.Select(x => x.ToString());
        return String.Join(",", enumOfStrings);
    }
}

然后您可以更轻松地使用该方法:

myEnumerable.ToCommaSeparatedList();
于 2013-06-21T03:45:07.803 回答