У меня есть следующая настройка, которая работает как надо.
public Thing[] GetThings(Guid id)
=> Context.Things
.Include(a => a.Members)
.Where(a => ...).ToArray()
.SelectArr(a => (Stuff)a with { Related = a.Members.Any(...) });
Специальный метод SelectArr является методом расширения, поскольку я широко использую массивы и превращать все в массив, а не в список или перечисляемое, стало утомительно.public static class IEnumerableExtensions
{
public static T2[] SelectArr(
this IEnumerable self, Func lambda)
=> self.Select(lambda).ToArray();
}
Затем я попытался перегрузить (затенить, скрыть и т. д.) обычный Select и соответствующим образом изменил синтаксис. Однако переключение на него, как показано ниже, не сработает.
public Thing[] GetThings(Guid id) => ...
.Select(a => (Stuff)a with { Related = a.Members.Any(...) });
public static T2[] Select(
this IEnumerable self, Func lambda) => ...;
Очевидно, CS8849, дерево выражений может не содержать -выражения. Я не совсем уверен, почему и как с этим бороться.
Я видел очень мало релевантных результатов (например, этого, на самом деле не предлагающего метод расширения). Большинство результатов посвящено тому, как создать метод расширения в общем смысле, который у меня уже работает. Я также нашел это, которое создает совершенно новый объект без . Но я пытаюсь применить записи (следовательно, с помощью) вместе с неявным оператором (отсюда и магическое приведение типов, которое, по сути, является созданием в исходном объекте, где я не могу передать дополнительный аргумент).< /p>
Самый лучший гость, который у меня есть на данный момент, это то, что я вникаю не в свой метод расширения, а в обычный. Я не могу понять, как перегрузить/переопределить/обновить его, заменив его моей версией. Я даже больше не уверен, куда мне следует тыкать: на проекцию (т. е. Select(...)) или на фильтрацию (т. е. Where(...)).
Я также подумываю пропустить неявный оператор и фактически создать новый экземпляр записи во время проецирования, но это все равно, что сдаться.
public static implicit operator Stuff(Thing self)
=> new(...);
Подробнее здесь: https://stackoverflow.com/questions/781 ... extensions
Как создать метод расширения, затмевающий обычные расширения LINQ? [дубликат] ⇐ C#
Место общения программистов C#
1710611869
Anonymous
У меня есть следующая настройка, которая работает как надо.
public Thing[] GetThings(Guid id)
=> Context.Things
.Include(a => a.Members)
.Where(a => ...).ToArray()
.SelectArr(a => (Stuff)a with { Related = a.Members.Any(...) });
Специальный метод SelectArr является методом расширения, поскольку я широко использую массивы и превращать все в массив, а не в список или перечисляемое, стало утомительно.public static class IEnumerableExtensions
{
public static T2[] SelectArr(
this IEnumerable self, Func lambda)
=> self.Select(lambda).ToArray();
}
Затем я попытался перегрузить (затенить, скрыть и т. д.) обычный Select и соответствующим образом изменил синтаксис. Однако переключение на него, как показано ниже, не сработает.
public Thing[] GetThings(Guid id) => ...
.Select(a => (Stuff)a with { Related = a.Members.Any(...) });
public static T2[] Select(
this IEnumerable self, Func lambda) => ...;
Очевидно, CS8849, дерево выражений может не содержать -выражения. Я не совсем уверен, почему и как с этим бороться.
Я видел очень мало релевантных результатов (например, этого, на самом деле не предлагающего метод расширения). Большинство результатов посвящено тому, как создать метод расширения в общем смысле, который у меня уже работает. Я также нашел это, которое создает совершенно новый объект без . Но я пытаюсь применить записи (следовательно, с помощью) вместе с неявным оператором (отсюда и магическое приведение типов, которое, по сути, является созданием в исходном объекте, где я не могу передать дополнительный аргумент).< /p>
Самый лучший гость, который у меня есть на данный момент, это то, что я вникаю не в свой метод расширения, а в обычный. Я не могу понять, как перегрузить/переопределить/обновить его, заменив его моей версией. Я даже больше не уверен, куда мне следует тыкать: на проекцию (т. е. Select(...)) или на фильтрацию (т. е. Where(...)).
Я также подумываю пропустить неявный оператор и фактически создать новый экземпляр записи во время проецирования, но это все равно, что сдаться.
public static implicit operator Stuff(Thing self)
=> new(...);
Подробнее здесь: [url]https://stackoverflow.com/questions/78172780/how-to-create-an-extension-method-overshadowing-the-regular-linq-extensions[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия