¿Son redundantes los tipos anónimos de C # en C # 7?

Dado que C # 7 introduce tuplas de valor, ¿existe un escenario significativo en el que sean más adecuadas que las tuplas?

Por ejemplo, la siguiente línea

collection.Select((x, i) => (x, i)).Where(y => arr[y.i].f(y.x)).ToArray();

hace la siguiente línea

collection.Select((x, i) => new {x, i}).Where(y => arr[y.i].f(y.x)).ToArray();

redundante.

¿Cuál sería el caso de uso donde uno se usa mejor que el otro (ya sea por razones de rendimiento u optimización)?

Obviamente, si se necesitan más de seis campos, las tuplas no se pueden usar, pero ¿hay algo más matizado?