¿Por qué no podemos declarar var a = new List a nivel de clase?

Sé que no podemos hacer esto a nivel de clase pero a nivel de método siempre podemos hacer esto.

var myList=new List // or something else like this 

Esta pregunta vino a mi mente desde donde declaramos variables como esta. Siempre proporcionamos la información de tipo en el RHS de la expresión. Así que el comstackdor no necesita hacer adivinaciones de tipo. (corrígeme si estoy equivocado).

así que la pregunta sigue POR QUÉ NO a nivel de clase mientras está permitida a nivel de método

Hay problemas técnicos con la implementación de esta característica. Los casos comunes parecen simples, pero los casos más difíciles (por ejemplo, campos que hacen referencia a otros campos en cadenas o ciclos, expresiones que contienen tipos anónimos) no lo son.

Consulte el blog de Eric Lippert para obtener una explicación detallada: ¿Por qué no hay var en los campos?

Los comstackdores simplemente no implementaron el soporte.

Es completamente mágico para el comstackdor, y el comstackdor en realidad no pone algo en IL que diga “averiguar el tipo en el tiempo de ejecución”, conoce el tipo y lo integra, por lo que también podría haber hecho eso para los miembros.

Simplemente no lo hace.

Estoy bastante seguro de que si le preguntas a un comstackdor real en el equipo del comstackdor de C #, obtendrías algo oficial, pero aquí no hay magia y debería ser posible hacer lo mismo para los campos de los miembros.

La palabra clave var fue inventada específicamente para soportar tipos anónimos. Por lo general, NO va a declarar tipos anónimos en el nivel de clase y, por lo tanto, no se implementó.

Su statement de ejemplo

 var myList=new List 

no es un buen ejemplo de cómo usar la palabra clave var ya que no es para el propósito previsto.

No es tan simple como implementar var en un método, ya que también hay que tener en cuenta diferentes modificadores y atributos como:

 [MyAttribute()] protected internal readonly var list = new List(); 

¡Lo que realmente me hubiera gustado es una const de tipo inferido !

 public const notFoundStatus = 404; // int 

Pase el tipo de lista en genérico

 class Class1 { public void genmethod(T i,int Count) { List list = i as List; for (int j = 0; j < Count; j++) { Console.WriteLine(list[j]); } } static void Main(string[] args) { Class1 c = new Class1(); c.genmethod("str",0); List l = new List(); l.Add("a"); l.Add("b"); l.Add("c"); l.Add("d"); c.genmethod>(l,l.Count); Console.WriteLine("abc"); Console.ReadLine(); } }