Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建IEnumerable.ToString_C#_.net_Linq_.net 4.0_Ienumerable - Fatal编程技术网

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