konto usunięte
Temat: Linq: jak stworzyć pusty obiekt IGrouping
Chciałem za pomocą Linq wyciągnąć DOKŁADNIE JEDEN element z kolekcji i poddać go dalszej projekcji przez .Select (jest to akurat kolekcja obiektów IGrouping). Poniższy kod ma jeden feler:
(_enumerable.SingleOrDefault(i => i.Key == 'key')).Select(.....)
jeżeli SingleOrDefault zwróci null to dostanę null reference exception. Chodzi mi o ładne rozwiązanie tego problemu. Ja rozwiązałem to tak jak na poniższym kodzie - definiując pusty IGrouping - i mam mocne wrażenie, że da się to zrobić prościej i coś przeoczyłem w dokumentacji.
(_enumerable.SingleOrDefault(i => i.Key == 'key') ?? new EmptyGrouping<SomeClass>()).Select(.....)
internal sealed class EmptyGrouping<T> : IGrouping<int,T> where T : class {
internal EmptyGrouping() {}
int IGrouping<int,T>.Key { get { return 0; } }
IEnumerator<T> IEnumerable<T>.GetEnumerator() {
yield break;
}
IEnumerator IEnumerable.GetEnumerator() {
yield break;
}
}