propiedades problemas con acentos c# compiler-construction expression-trees compiler-bug writeonly

problemas - C#compilador error? La sintaxis del inicializador de objetos utilizada para la propiedad de solo escritura en Expression hace que csc se bloquee



problemas con acentos en c# (2)

Esto es lo que encontré en línea relacionado con el error,

Publicado por Microsoft el 9/03/2010 a las 10:58 a.m.

Gracias a todos por los informes. Creo que este problema se ha solucionado después de RC. El problema es que el compilador de C # se bloquea al intentar identificar un error o una advertencia. En varios casos, hemos visto que la advertencia que se informa es que la variable de entorno LIB contiene una ruta no válida. Para evitar el bloqueo, compruebe que su variable de entorno LIB contiene rutas válidas.

Saludos,

Ed Maurer Gerente de Desarrollo, VB y C # compiladores

Puede considerar esto como un informe de error, sin embargo, tengo curiosidad si estoy terriblemente equivocado aquí o si hay una explicación de Eric o alguien más en Microsoft.

Actualizar

Esto ahora se publica como un error en Microsoft Connect.

Descripción

Considere la siguiente clase:

class A { public object B { set { } } }

Aquí, AB es una propiedad de solo escritura pero por lo demás bien.
Ahora, imagina que lo asignamos dentro de la expresión :

Expression<Func<A>> expr = () => new A { B = new object { } };

Este código hace que el compilador de C # (tanto .30.30729.4926 como 4.0 .30319.1) escupa

Error interno del compilador (0xc0000005 en la dirección 013E213F): el culpable probable es ''BIND''.

y choque.

Sin embargo, el mero hecho de reemplazar la sintaxis del inicializador de objetos ( { } ) con un constructor ( ( ) ) se compila .

Código completo para su reproducción:

using System; using System.Linq.Expressions; class Test { public static void Main() { Expression<Func<A>> expr = () => new A { B = new object { } }; } } class A { public object B { set { } } }

(Y sí, lo logré trabajando en un proyecto real).


Me temo que no soy Eric Lippert (Oh, pero podría ser tan descarado ...), pero como un ex jugador de Visual Studio que aún puede buscar en las fuentes, puedo decir dos cosas sobre esto:

  1. Cada vez que ve algo que comienza con "Error interno del compilador", definitivamente ha encontrado un error. Para eso existe ese error, ya sea el compilador C #, VB o C ++. Es el "Oh, s ** t, algo salió realmente inesperadamente mal". error de tirar-para-nuestras-manos-y-rescate.

  2. Más allá de eso, este es definitivamente un error en el compilador de C # que debe informarse. El código que está fallando está asumiendo que cuando estás haciendo un inicializador en una propiedad que hay un captador que puede ver y, oye, ¿adivina qué? En este caso, no hay. Por extraño que parezca, si cambio el tipo que se está construyendo a algún tipo "C" en lugar de "objeto", no se produce el bloqueo, así que supongo que es un error más arriba en la pila (es decir, el código nunca debería haber sido Hasta el punto donde se buscaba la propiedad getter).

Espero que esto ayude.