En C #, ¿puede definir un alias para una tupla de valor con nombres?


92

Sé que es posible definir alias en C # con la palabra clave using .

p.ej

using ResponseKey = System.ValueTuple<System.Guid, string, string>;

Sin embargo, ¿es posible definir uno usando la nueva sintaxis para tuplas de valor?

using ResponseKey = (Guid venueId, string contentId, string answer);

Esta sintaxis no parece funcionar. ¿Deberia?


1
No sé la respuesta, pero se parece mucho a "¿puedo usar var a nivel de módulo para definir una variable?"
Mario Vernari

si no se compila significa que no debería funcionar
Selman Genç

4
No sé la respuesta, pero parece que es mejor crear una clase o estructura para ese propósito. Las tuplas son buenas, pero no las uses en exceso.
Yeldar Kurmangaliyev

4
Comentario interesante @YeldarKurmangaliyev. La razón para usar esto es no tener que implementar todas las interfaces comparables para usarlas como una simple clave para un objeto. Sí, soy vago, pero también estoy usando las funciones del lenguaje al máximo.
Nick Randell

3
@NickRandell: la mayoría de las veces escribe software para las personas (otros desarrolladores), ellos leerán su código. Tener una clase y propiedades con nombres descriptivos es un enfoque más amigable / efectivo. La mayoría de las veces que los programadores dedican a leer códigos (propios y ajenos), nombres descriptivos y estructuras de datos les ahorrarán tiempo
Fabio

Respuestas:



1

usingse define como: ( MSDN ).using identifier = namespace-or-type-name;

(Guid venueId, string contentId, string answer) no es un espacio de nombres ni un nombre de tipo (totalmente calificado).

Pero principalmente estoy adivinando. Ni siquiera sabía que existía C # 7.0 hasta ahora.


1
Esa es la especificación para C # 1.1, ¿cómo prueba eso algo sobre C # 7.0?
svick

1
Entiendo cómo proviene la suposición de que funcionaría. Podría haber hecho el mismo Pero no está bien. El uso no es un alias para un tipo. Pero para un nombre de tipo o un nombre de espacio de nombres. Y las características relacionadas con el compilador son una de las últimas cosas que puede cambiar, sin romper el código existente. Por lo que probablemente no puedan expandirlo. Pero todo eso probablemente se explica con mucho mejor detalle en la publicación de David Arno anterior. Lo que voté a favor porque responde mejor. Haciendo que su pregunta no sea un problema ...
Christopher

2
@svick La pregunta era si esta sintaxis específica "debería" permitirse. Esto responde correctamente con "no, los desarrolladores de C # no están obligados a permitir esta sintaxis específica, porque no se permitieron sintaxis similares desde las primeras versiones de C #". La pregunta más amplia es si se debe permitir la entrada de alguna expresión de tipo using.
IllidanS4 apoya a Monica

1
@ IllidanS4 Si eso es lo que dice esta respuesta, entonces no está muy claro. No menciona que la especificación vinculada sea antigua ni ninguna parte del argumento que presentó.
svick

5
@Christopher Si creo que una respuesta es mala, la comentaré. No me importa qué tan rápido se haya escrito la respuesta o qué renuncias tenga. Y si cree que su respuesta no agrega ningún valor, no dude en eliminarla. Además, creo que la gente viene a SO para encontrar respuestas informadas, por lo que tal vez debería pensar un poco antes de escribir una respuesta desinformada.
svick
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.