¿Qué pasa con los parámetros de tipo genérico opcionales en C # 5.0? [cerrado]

StackOverflow https://stackoverflow.com/questions/2541659

  •  23-09-2019
  •  | 
  •  

Pregunta

Es sólo una idea.

¿No sería útil contar con parámetros de tipo opcionales en C #?

Esto haría la vida más fácil. Estoy cansado de tener múltiples clases con el mismo nombre, pero con diferentes parámetros de tipo. También VS no admite esta muy vell (nombres de archivo): -)

Esto sería, por ejemplo, eliminar la necesidad de un IEnumerable no genérico:

interface IEnumerable<out T=object>{
  IEnumerator<T> GetEnumerator()
}

¿Qué opinas?

¿Fue útil?

Solución

Soy definitivamente para él.

Actualmente estoy escribiendo métodos de ayuda para diferentes escenarios en el que necesito para pasar referencias a diferentes miembros y métodos de clases. Para lograr esto que estoy tomando, por ejemplo, un Expression<Func<TIn, TOut>> como argumento al helper (que me permite llegar el método con una expresión lambda, manteniendo así todo lo inflexible de tipos).

PERO - Actualmente tengo que definir un nuevo método de ayuda para cada número diferente de argumentos de entrada, ya que necesitan tener una cantidad diferente de argumentos genéricos a ella. En lugar de

HelperMethod<TIn>(Expression<Action<TIn>> arg) // Yes, C# can distinguish
HelperMethod<TOut>(Expression<Func<TOut>> arg) // these two from eachother
HelperMethod<TIn, TOut>(Expression<Func<TIn, TOut>> arg)
HelperMethod<TIn1, TIn2, TOut>(Expression<Func<TIn1, TIn2, TOut>> arg)
// etc

Podría conformarse con, a lo sumo, dos métodos:

HelperMethod<TIn>(Expression<Action<TIn>> arg)
HelperMethod<TOut, TIn1 = DummyType, ...>(Expression<Func<TIn1, ..., TOut> arg)

En mi caso, sería evitar una gran cantidad de duplicación de código ...

Otros consejos

¿Cuál sería el uso principal de esta característica del lenguaje? Puedo ver que podría ayudar con algunas tareas administrativas tales como nombres de archivos y escribir menos y eso, pero más allá de eso no veo la utilidad de esta sería.

Además, esta característica podría complicar significativamente las restricciones genéricas que podrían ser colocados en el parámetro de tipo genérico y el mismo tipo por defecto tendría que funcionan como una especie de restricción en sí genérico.

Creo que esto complicaría el idioma sin ofrecer ningún beneficio real para el desarrollador.

No está claro para mí qué es exactamente lo que está proponiendo. Actualmente puede haber tipos con el mismo nombre pero diferentes parámetros de tipo, pero que no están relacionados de alguna manera por la herencia - lo que haría su propuesta a continuación

Por otra parte, si la biblioteca de clase base se ha rediseñado desde cero, es casi seguro que no sería una interfaz IEnumerable no genérico - que sólo existe porque el CLR no apoyó los genéricos cuando se introdujo la interfaz y la interfaz genérica hereda de él sólo para que el código heredado a seguir trabajando. clases reconocidas recientemente se están creando para un CLR, que hace genéricos de apoyo, por lo que esa cuestión ya no es relevante.

Hace poco me encontré con un caso que podría haber usado algo así, simplemente no del todo. Tenía un método que realiza una transformación de todo tipo, entre la clase A y la clase asociada UN NIÑO y clase B y clase BChild. Por lo general, el par A / UN NIÑO era el mismo que B / BChild, pero a veces A era una clase base de B y UN NIÑO una clase base de BChild.

Hubiera sido bueno poder decir que mi tipo de parámetro por defecto en la TB TA, y que TBChild por defecto en TAChild.

Tenga en cuenta que esto era una situación en la que era necesario escribir los parámetros de tipo, ya que la inferencia no funcionaría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top