c# dynamic roslyn c#-6.0

c# - Operador de propagación nula y variable dinámica.



dynamic roslyn (1)

He estado buscando en el operador de propagación nula en C # 6 y traté de hacerlo funcionar con las variables de tipo dynamic pero sin éxito. Considere el código a continuación, se compila pero CLR lanza AccessViolationException en tiempo de ejecución cuando la propagación nula se aplica a un objeto dinámico.

class SomeType { public object SomeProperty { get; set; } static void Main() { var obj = new SomeType() { SomeProperty = "ABCD" }; var p1 = ((dynamic)obj).SomeProperty; //OK, p1 is set to "ABCD" var p2 = ((dynamic)obj)?.SomeProperty; //AccessViolationException Console.ReadLine(); } }

Al principio pensé que esto podría ser un error pero luego pensé en las struct . Normalmente no puedes aplicar ?. operador a una variable de tipo de valor (porque no puede ser nulo). Pero puedes convertirlo en dynamic y luego aplicar el operador. Así que cambié SomeType para que fuera struct y obtuve la misma excepción.

La pregunta es, ¿es por diseño que la propagación nula de las variables dinámicas siempre va a generar una excepción porque el objeto subyacente puede ser un tipo de valor?

La AccessViolationException es bastante fea de todos modos, ¿obtienes el mismo cuando ejecutas el código?


AccessViolationException es casi siempre un error de compilación o una llamada PInvoke mal formada.