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

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić