Код: Выделить всё
static string GetCommonParentDirectory(string[] filePaths)
{
try
{
return filePaths
.Select(p => Path.GetDirectoryName(p))
.Distinct(StringComparer.OrdinalIgnoreCase)
.SingleOrDefault();
}
catch (InvalidOperationException) // Sequence contains more than one element.
{
throw new ArgumentException(
"The files are not located in the same folder.");
}
}
Код: Выделить всё
catch. Я подумываю об объединении операторов LINQ FirstOrDefaultКод: Выделить всё
static string GetCommonParentDirectory(string[] filePaths)
{
string commonDirectory = filePaths
.Select(p => Path.GetDirectoryName(p))
.Distinct(StringComparer.OrdinalIgnoreCase)
.FirstOrDefault(out bool isSingle);
if (!isSingle) throw new ArgumentException(
"The files are not all located in the same folder.");
return commonDirectory;
}
В случае, если последовательность пуста, FirstOrDefault должен возвращать значение null (или значение по умолчанию в целом), а значение isSingle должно быть false. В противном случае FirstOrDefault должен возвращать первый элемент, а isSingle должен быть истинным только в том случае, если последовательность содержит ровно один элемент.
Приношу извинения, если этот вопрос задавался раньше. Я искал и не нашел.
Подробнее здесь: https://stackoverflow.com/questions/798 ... exceptions
Мобильная версия