Zrzeczenie się: to pytanie jest spowodowane moją osobistą ciekawością bardziej niż faktyczną potrzebą osiągnięcia czegoś. Mój przykład zostanie wymyślony. Niemniej jednak myślę, że to kwestia, która może bardzo dobrze się pojawić.Używanie zamka LINQ z zamknięciem, które nie zwraca wartości
Załóżmy, że używamy Zip do iteracji w dwóch sekwencjach, wywołując metodę void, która właśnie zgłasza wyjątek, jeśli okaże się, że jeden element pary różni się od drugiego (dlatego odrzuca jakąkolwiek wartość zwracaną). Chodzi o to, że metoda nie zgłasza wyjątku, ponieważ zwraca nieważne.
Innymi słowy, robimy rodzaj ForEach
w dwóch kolekcjach (a przy okazji, wiem, co Eric Lippert thinks about ForEach
).
Teraz Zip
chce Func<TFirst, TSecond, TResult>
, więc oczywiście przekazanie czegoś równoważnego Action<TFirst, TSecond>
nie będzie działać.
Moje pytanie brzmi: czy istnieje idiomatyczny sposób, który jest lepszy od tego (tj. Zwracanie wartości dummy)?
var collection1 = new List<int>() { ... };
var collection2 = new List<int>() { ... };
collection1.Zip(collection2, (first, second) =>
{
VoidMethodThatThrows(first, second);
return true;
});
związane Eric Lippert blogu: http://blogs.msdn.com/b/ericlippert/archive/2009/06/29/the-void-is-invariant.aspx – AakashM