技術上在foreach執行與索引Select
一樣的,你可以做這樣的事情:
public override string ToString()
{
StringBuilder output = new StringBuilder();
output.Append(count);
int index = 0;
foreach (var item in array)
{
output.Append($"{item}{item.GetInfo()}{string.Join(" ", item.Content(index))}");
index++;
}
return output.ToString();
}
總之,無論如何,你要去int index
。根據performance
,將它移到foreach並不是很有幫助。
如果您真的不喜歡在任何地方編寫增量索引,您也可以嘗試使用自己的ForEach擴展。
public static class EnumerableExtensions
{
public static void ForEachWithIndex<T>(this IEnumerable<T> sequence, Action<int, T> action)
{
// argument null checking omitted
int i = 0;
foreach (T item in sequence)
{
action(i, item);
i++;
}
}
}
然後你的方法會更簡單,但你必須多一個類來管理:
public override string ToString()
{
StringBuilder output = new StringBuilder();
output.Append(count);
array.ForEachWithIndex((index, item) => output.Append($"{item}{item.GetInfo()}{string.Join("", item.Content(index))}"));
return output.ToString();
}
而對於可讀性,如果你真的只是把字符串並排:
public override string ToString()
{
StringBuilder output = new StringBuilder();
output.Append(count);
array.ForEachWithIndex((index, item) => output.Append(
string.Concat(
item,
item.GetInfo(),
string.Join("", item.Content(index))
)));
return output.ToString();
}
由於string.Concat
無論如何都會更加明顯表現明智。如果您需要格式化,請選擇其他人。
爲什麼近距離投票,因爲這太寬? –
好吧,爲什麼downvote?這個世界如何過於廣泛? – hello
[mcve]在這裏很有用。 – Enigmativity