public static string ToString <TValue>(this IEnumerable <KeyValuePair <TValue, Procent> > list, string lineBreaker, int howMuchStringsToShow) { var sb = new StringBuilder(); //if (list.Count() <= howMuchStringsToShow || howMuchStringsToShow == 0) //{ // bool isFirstRow = true; // foreach (var item in list) // { // if (!isFirstRow) // sb.Append(lineBreaker); // isFirstRow = false; // sb.Append(item.Key).Append(": ").Append(item.Value); // } //} //else // there is at least howMuchStringsToShow + 1 elements bool isFirstRow = true; bool isAddedAnyStrings = false; //for (int i = 0; i < howMuchStringsToShow; i++) int i = 0; var othersSum = new Procent(0f); foreach (var item in list) { if (i < howMuchStringsToShow || howMuchStringsToShow == 0) { if (!isFirstRow) { sb.Append(lineBreaker); } isFirstRow = false; sb.Append(item.Key).Append(": ").Append(item.Value); isAddedAnyStrings = true; } else { othersSum.Add(item.Value); } // break; i++; } //for (int i = howMuchStringsToShow; i < list.Count; i++) // othersSum.Add(list[i].Value); if (othersSum.isNotZero()) { sb.Append(lineBreaker); sb.Append("Others: ").Append(othersSum); } if (isAddedAnyStrings) { return(sb.ToString()); } else { return("none"); } }