Хорошо, учитывая тот метод, который вы можете использовать 1 :
string[] s = products.Select<string>(ProductToString).ToArray();
Однако было бы более идиоматичным делать это без отдельного метода, обычноиспользуя лямбда-выражение:
// Matches ProductToString, but not your description
string[] s = products.Select(p => p.Name).ToArray();
Я бы использовал отдельный метод, только если он собирался вызываться из разных мест (обеспечение согласованности) или выполнял большую работу.
РЕДАКТИРОВАТЬ: Я только что заметил, что ваше описание (требуется идентификатор + имя) на самом деле не соответствует указанному вами ProductToString
методу (который просто дает имя).Для идентификатора + имя я бы использовал:
string[] s = products.Select(p => p.ID + " " + p.Name).ToArray();
или
string[] s = products.Select(p => string.Format("{0} {1}", p.ID, p.Name))
.ToArray();
Или, конечно, вы можете просто изменить свой метод ProductToString
.
В качестве альтернативыВы можете переопределить ToString()
в Product
, если это обычно , как вы хотите преобразовать Product
в string
.Затем вы можете использовать преобразование группы методов или лямбда-выражение для вызова ToString
.
1 Возможно, вам не нужно явно указывать аргумент типа -что:
string[] s = products.Select(ProductToString).ToArray();
будет работать нормально - правила вывода типов и преобразования групп методов меня всегда смущают, а поведение компилятора со временем немного меняется.Быстрый тест сейчас выглядит так: работает , но могут быть тонкости в слегка различных ситуациях.