¿Cómo resolver el problema de los genéricos?

Su ejemplo no es un tipo anónimo, es una tupla. Sí, trabajar con Tuples va a tener ese problema.

Un tipo anónimo se vería así:

var customer = new { FirstName = "Ted", LastName = "Johnson", Id = 12345 };

Y, obviamente, podría usar customer.FirstName o customer.Id.

El problema aquí no es tratar con los genéricos per se, es que los genéricos ofrecen lo que ofrecen. Tome una lista . Usando una Lista , podría decir myList [5] .LastName = “Jordan”. Tenga en cuenta que cuando estoy tratando con “myList”, las cosas que se ofrecen no dependen de qué es T. Una vez que llego a un objeto de tipo T, está claro qué cosas son cuáles.

El uso de Tuples en su código generalmente hace que el código sea difícil de leer. Es una indicación de que deberías haber declarado una clase, pero eras demasiado flojo para molestarte. (Al menos, eso es lo que significaba cuando solía Tuple. Más de la mitad del tiempo, volví más tarde y lo arreglé).