Избегайте наследовались, когда состав был бы легче.
, Например, я видел много как это:
public class CustomerSupportApp extends JFrame {
JList<Customer> customers;
OtherBusinessComponent importantComponent;
etc. etc
}
Это смешивает бизнес-логику с презентацией. Это только вносит изменения от трудного до невозможного.
Лучше:
public class CustomerSupportApp {
JList<Customer> customers;
OtherBusinessComponent importantComponent;
// The app HAS-A frame but not IS-A frame
JFrame frame;
etc. etc
}
List<int> list = ...;
string.Join(",", list.Select(n => n.ToString()).ToArray())
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(String.Join(",", list.Select(i => i.ToString()).ToArray()));
Для большей крутизны я бы сделал этот метод расширения на IEnumerable
public static class IEnumerableExtensions {
public static string BuildString<T>(this IEnumerable<T> self, string delim = ",") {
return string.Join(delim, self)
}
}
Используйте его следующим образом:
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(list.BuildString(", "));
Кажется достаточно быстрым.
IList<int> listItem = Enumerable.Range(0, 100000).ToList();
var result = listItem.Aggregate<int, StringBuilder, string>(new StringBuilder(), (strBuild, intVal) => { strBuild.Append(intVal); strBuild.Append(","); return strBuild; }, (strBuild) => strBuild.ToString(0, strBuild.Length - 1));
Моя "умная" запись:
List<int> list = new List<int> { 1, 2, 3 };
StringBuilder sb = new StringBuilder();
var y = list.Skip(1).Aggregate(sb.Append(x.ToString()),
(sb1, x) => sb1.AppendFormat(",{0}",x));
// A lot of mess to remove initial comma
Console.WriteLine(y.ToString().Substring(1,y.Length - 1));
Просто не понял, как условно добавить запятую.
Для примерно одного миллиарда решений для немного более сложная версия этой проблемы - многие из которых медленные, содержат ошибки или даже не компилируются - см. комментарии к моей статье по этой теме:
http://blogs.msdn.com/ericlippert /archive/2009/04/15/comma-quibbling.aspx
и комментарий StackOverflow: