Better:
static int RomanToInt( string roman ) {
return roman
.ToLower()
.Select(
n =>
new Dictionary {
{'i', 1},
{'v', 5},
{'x', 10},
{'l', 50},
{'c', 100},
{'d', 500},
{'m', 1000},
}[ n ]
)
.Aggregate(
new[] {0, 0, 0},
( c, d ) =>
new[] {
c[ 0 ] + ( d > c[ 2 ] ? d - c[ 1 ] : c[ 1 ] ),
d > c[ 2 ] ? 0 : d,
d
}
)
.Take( 2 )
.Sum();
}