Я бы выделил наиболее очевидную общность для начала:
var audioItems = myObject.Audio.OrderBy(item => item.Key);
row = new List<String> {
String.Join(innerSeparator, audioItems.Select(x => x.Value).ToArray());
String.Join(innerSeparator, audioItems.Select(x => x.Format).ToArray());
String.Join(innerSeparator, audioItems.Select(x => x.Channels).ToArray());
String.Join(innerSeparator, audioItems.Select(x => x.Language).ToArray());
}
Если бы я использовал .NET 4, я бы тогда удалил вызовы ToArray
, так как string.Join
теперь имеет больше перегрузок:
var audioItems = myObject.Audio.OrderBy(item => item.Key);
row = new List<String> {
String.Join(innerSeparator, audioItems.Select(x => x.Value));
String.Join(innerSeparator, audioItems.Select(x => x.Format));
String.Join(innerSeparator, audioItems.Select(x => x.Channels));
String.Join(innerSeparator, audioItems.Select(x => x.Language));
}
Я может остановиться на этом.Но если вы хотите, вы всегда можете добавить другой метод расширения:
public static string Separate<T>(this IEnumerable<T> items, string separator)
{
return string.Join(separator, items);
}
Тогда:
var audioItems = myObject.Audio.OrderBy(item => item.Key);
row = new List<String> {
audioItems.Select(x => x.Value).Separate(innerSeparator));
audioItems.Select(x => x.Format).Separate(innerSeparator));
audioItems.Select(x => x.Channels).Separate(innerSeparator));
audioItems.Select(x => x.Language).Separate(innerSeparator);
}
Я почти наверняка остановлюсь на этом.Вы могли бы продолжать:
public static IEnumerable<string> ProjectAndSeparateMany<T>(
this IEnumerable<T> items, string separator, Func<T, object>... projections)
{
return projections.Select(projection => items.Select(projection)
.Separate(separator);
}
И назвать это с помощью:
var audioItems = myObject.Audio.OrderBy(item => item.Key);
row = audioItems.ProjectAndSeparateMany(innerSeparator,
x => x.Value, x => x.Format, x => x.Channels, x => x.Language).ToList();
... но в этот момент это так что специалистЯ сомневаюсь, что когда-нибудь буду использовать это снова ...