Я ищу здесь собственный оператор LINQ. У меня есть массив путей к файлам, и я хочу найти их общую родительскую папку. Если файлы не находятся в одной папке, я хочу создать исключение и закрыть приложение. Поэтому моя идея заключалась в использовании оператора LINQ SingeOrDefault. Этот оператор выдает исключение, если последовательность содержит более одного элемента. Однако сообщение об исключении слишком общее, и я хочу добавить более описательное. Итак, я сделал следующее:
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.");
}
}
Это работает, но некрасиво и основано на перехвате исключений, что неэффективно. Я бы предпочел реализацию без try/catch. Я подумываю об объединении операторов LINQ FirstOrDefault и SingleOrDefault, например:
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 LINQ, включающую дополнительный выходной параметр bool isSingle?
В случае, если последовательность пуста, FirstOrDefault должен возвращать значение null (или значение по умолчанию в целом), а значение isSingle должно быть false. В противном случае FirstOrDefault должен возвращать первый элемент, а isSingle должен быть истинным только в том случае, если последовательность содержит ровно один элемент.
Пояснение: Меня интересует оператор LINQ, имеющий эту сигнатуру:
public static TSource FirstOrDefault(
this IEnumerable source, out bool isSingle)
Подробнее здесь: https://stackoverflow.com/questions/798 ... exceptions
LINQ SingleOrDefault, но без исключений ⇐ C#
Место общения программистов C#
1770743241
Anonymous
Я ищу здесь собственный оператор LINQ. У меня есть массив путей к файлам, и я хочу найти их общую родительскую папку. Если файлы не находятся в одной папке, я хочу создать исключение и закрыть приложение. Поэтому моя идея заключалась в использовании оператора LINQ SingeOrDefault. Этот оператор выдает исключение, если последовательность содержит более одного элемента. Однако сообщение об исключении слишком общее, и я хочу добавить более описательное. Итак, я сделал следующее:
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.");
}
}
Это работает, но некрасиво и основано на перехвате исключений, что неэффективно. Я бы предпочел реализацию без try/catch. Я подумываю об объединении операторов LINQ FirstOrDefault и SingleOrDefault, например:
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;
}
[b]Мой вопрос[/b]: как реализовать перегрузку FirstOrDefault LINQ, включающую дополнительный выходной параметр bool isSingle?
В случае, если последовательность пуста, FirstOrDefault должен возвращать значение null (или значение по умолчанию в целом), а значение isSingle должно быть false. В противном случае FirstOrDefault должен возвращать первый элемент, а isSingle должен быть истинным только в том случае, если последовательность содержит ровно один элемент.
[b]Пояснение:[/b] Меня интересует оператор LINQ, имеющий эту сигнатуру:
public static TSource FirstOrDefault(
this IEnumerable source, out bool isSingle)
Подробнее здесь: [url]https://stackoverflow.com/questions/79885103/linq-singleordefault-but-without-throwing-exceptions[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия