像
这样的东西char[] a = new char[] { 'a', 'b', 'c', 'd' };<br>
Console.WriteLine(a);
与C#很好地配合使用。 如果数组的类型是整数,则不再起作用。 它必须编码为
for (int k = 0; k < a.Length; k++) Console.Write(a[k]); Console.WriteLine();
这看起来很蹩脚。有更简洁的方法吗? 例如,某些将WriteLine(a)以无循环方式扩展到
的方法WriteLine("{0},{1},{2},...,{a.Length-1}", a[0],a[1],a[2],...,a[a.Length-1]);
也许有一些巧妙的Linq技巧?
答案 0 :(得分:10)
String.Join
怎么样?
从.Net Framework 4
开始,第二个参数是object[]
:
String.Join Method (String, Object[])
使用每个元素之间的指定分隔符连接对象数组的元素。
在Visual Studio 2010中尝试使用针对框架4的代码段:
int[] a = new int[] {1,2,3,4,5,6,7 };
Console.WriteLine(String.Join(",", a));
产地:
1,2,3,4,5,6,7
答案 1 :(得分:1)
.Aggregate<TSource, TAccumulate>(source, func)
在这种情况下是你的朋友。您可以使用StringBuilder
对其进行播种,然后从那里链接“附加”。 StringBuilder类中的大多数成员方法都会将一个实例返回给您传入的StringBuilder,这使它很适合在这些类型的场景中使用。
<强>样本... 强>
var charArray = new[] { 'a', 'b', 'c', 'd' };
var objectArray = new object[] { 'a', "Hello", 1, null };
Console.WriteLine(new string(charArray));
Console.WriteLine(objectArray.Aggregate(
new StringBuilder(),
(sb,v)=>sb.Append(v+" ")));
结果......
abcd
a Hello 1
答案 2 :(得分:0)
因为ToString()
方法而有效。毕竟在toString()中有一个循环!
对于任何自定义类,您可以覆盖toString方法。
答案 3 :(得分:0)
我认为你可以使用类似的东西:
a.ForEach(e=>WriteLine(e))
答案 4 :(得分:0)
您可以使用Enumerable。Select和Aggregate
var intArray = new[] { 1, 2, 3, 4 };
Console.WriteLine(intArray.Select(i => i.ToString())
.Aggregate((acc, item) => acc + "\n" + item));
输出:
1
2
3
4
答案 5 :(得分:0)
Enumerable.Range(0, 100).ToList().ForEach(Console.Write); Console.WriteLine();
ForEach()方法特定于List<T>
,但您可以根据需要在IEnumerable<T>
上创建自己的扩展方法:
public static class MyExtensions
{
public static void ForEach<T>(this IEnumerable<T> list, Action<T> action)
{
foreach (var item in list) action(item);
}
}
现在你可以这样做:
Enumerable.Range(0, 100).ForEach(Console.Write);
答案 6 :(得分:0)
对OP的要求感到困惑,因为示例代码执行了两个不同的操作。 一个打印:
123456
其他印刷品:
1,2,3,4,5,6-
如果你想要第二个,请使用gimel的解决方案(使用string.Join)。如果你想要第一个,这是最简单的方法,即使对于C#新手也很容易阅读,甚至可以在C#1.0中使用:
foreach(object k in a)
Console.Write(k);
为什么过于复杂这么简单的事情?虽然这不是“无循环”,但它与其他部分一样简洁。其余的仍然是循环,它们只是被语法隐藏:)