Есть ли способ с помощью Linq перебрать список, проверить условие и отправить успехи и неудачи на два разных выхода?C#

Место общения программистов C#
Ответить
Anonymous
 Есть ли способ с помощью Linq перебрать список, проверить условие и отправить успехи и неудачи на два разных выхода?

Сообщение Anonymous »

Используя Linq, вы можете перебирать список, выбирая все элементы, соответствующие условию, с помощью метода Where. Однако у меня есть список, в котором я хочу взять все элементы, соответствующие условию, и выполнить одно действие, затем взять все элементы, которые не соответствуют условию, и выполнить другое.
Я могу представить себе такой сценарий примерно так:

Код: Выделить всё

var myList = new [] { 1,2,3,4,5 }
var result = myList
.MyAwesomeSpecialWhereMethod(i => i % 2 == 0) // results in an object that has 2 lists, one containing successes and one containing failures
.SelectSuccess(i => $"{i} is even") // modifies the success list into a list of strings
.SelectFailure(i => $"{i} is odd") // modifies the failure list into a list of strings
.Collect((success, failure) => success.Union(failure)) // aggregates the success and failure list using my lambda
Console.WriteLine(result)
Результатом этого будет

Код: Выделить всё

["2 is even","4 is even","1 is odd","3 is odd","5 is odd"] // (because I didn't bother sorting)
Думаю, случай «У меня есть список дел, и я хочу сделать одно со всем, что соответствует этому условию, а другое — со всем, что не соответствует» — не редкость вариант использования. Преимущество этой структуры заключается в том, что массив не проходит дважды с двумя отдельными значениями Where. Я могу сделать это с помощью цикла

Код: Выделить всё

foreach (var i in myList){
if (i%2 == 0){
evens.Add(i);
} else {
odds.Add(i);
}
Однако мне интересно, есть ли более «LINQy» способ сделать это.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ion-and-se
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»