Svidja mi se ova fora sa select transformacijom, trazio sam nacin da dodjem do indeksa, nisam ni pomislio da select to daje. cool.
isti imam bug u mom LINQu sa 9-om na parnoj poziciji, i isto sam konacno nasao IEnumerabe<char> u stringu

Nije uopste preko metoda vec sam string publikuje IEnumerable (d'oh). Ovo resenje dakle moze da se jos malo optimizuje i skrati:
- ne mora da se konvertuje u List<char>
- taj aggregate na kraju je u stvari prosti Sum
- u selct transformaciji moze da se smanji broj matematickih operacija, dovoljno je da se proveri >4 i da se koristi -9 umesto %9 nije neki benefit al ako vec jurimo "savrsenstvo"
Code:
bool valid = cardNumber
.Select(c => c - 48)
.Reverse()
.Select((s, i) => i%2 == 1 ? (s > 4 ? s*2 - 9 : s*2) : s)
.Sum()%10 == 0;
inace, ovaj metod ne proizvodi ni jednu temp kopiju podataka, suma na kraju iterira kroz tri razlicita iteratora u jednom cugu nad stringom

Apstraktno ili ne, mislim da je sasvim komparativno sa bare metal resenjem.
A inace, pricasmo io regexu
