C# 如何创建IEnumerable.ToString
如果我有一个C# 如何创建IEnumerable.ToString,c#,.net,linq,.net-4.0,ienumerable,C#,.net,Linq,.net 4.0,Ienumerable,如果我有一个IEnumerable,这是创建一个吐出逗号分隔值的ToString方法的最干净的方法吗 var enumOfObjects = myEnumerable as IList<object> ?? myEnumerable.Cast<object>().ToList(); var enumOfStrings = enumOfObjects.Select(x => x.ToString()); var finalString = Strin
IEnumerable
,这是创建一个吐出逗号分隔值的ToString方法的最干净的方法吗
var enumOfObjects = myEnumerable as IList<object> ?? myEnumerable.Cast<object>().ToList();
var enumOfStrings = enumOfObjects.Select(x => x.ToString());
var finalString = String.Join(",", enumOfStrings);
var enumofoobjects=myEnumerable as IList??myEnumerable.Cast().ToList();
var enumofstring=enumOfObjects.Select(x=>x.ToString());
var finalString=String.Join(“,”,enumofstring);
或者,foreach循环会更好吗?或者有没有更干净的方法可以做到这一点?因为您的代码似乎已经可以工作了,您可以将代码制作成一种扩展方法,以便于重用:
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);
}
}
以下内容较短(可能被认为更干净):
看起来像:
IEnumerable<object> enumOfObjects = new List<object> {1, "Cat", 3, 4};
Console.WriteLine(enumOfObjects.Aggregate((a,b) => a+","+b));
//outputs 1,Cat,3,4
IEnumerable enumOfObjects=新列表{1,“Cat”,3,4};
Console.WriteLine(EnumOfObject.Aggregate((a,b)=>a+“,”+b));
//输出1,Cat,3,4
如果您确实想将其用作字符串,则需要对其调用
ToString()
,或将其转换为字符串。您已经回答了您的问题,string.Join
是最简单的一种用法。注意:阅读此,尚不清楚enumofstring
是enum
还是IEnumerable
。可能:string finalString=string.Join(,”,myEnumerable.Select(x=>x.ToString())
String.Join(“,”,myEnumerable.Cast())
可能更好(避免ToList
调用)并不是因为问题似乎是关于IEnumerable
的非泛型版本,因为String.Join
已经可以在…@AlexeiLevenkov上使用任何泛型了,你是对的。我改变了答案。我的意思是,既然OP已经有了一些可以工作的东西,但他不喜欢它太笨重,他可以将它封装在一个扩展方法中。是的,我计划在最后这样做,但在扩展方法中寻找最好的东西。如果我要包装任何东西,那么我将使用聚合,因为它的性能会稍微好一点。注意:如果您想喜欢聚合,请使用StringBuilder
。。。同样,这个答案并没有显示IEnumerable
到IEnumerable
…耶,这实际上是Resharper建议的。我只是不认为聚合是显而易见的…但我猜我的也不是…我会这样做,并将其包装在一个扩展中method@JustinPihony我认为你最初的做法很好。聚合在更多函数式语言中非常常见(通常称为“reduce”或“fold”)。
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