Operador de propagação nula e variável dinâmica
Eu estive olhando o operador de propagação nula em C # 6 e tentei fazê-lo funcionar com as variáveis dedynamic
tipo, mas sem sucesso. Considere o código abaixo, ele compila, mas o CLR lançaAccessViolationException
em tempo de execução quando a propagação nula é aplicada ao 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();
}
}
No começo, pensei que isso poderia ser um bug, mas depois pensei emstruct
s. Normalmente você não pode se inscrever?.
operador para uma variável de tipo de valor (porque não pode ser nulo). Mas você pode enviá-lo paradynamic
e depois aplique o operador. Então eu mudeiSomeType
ser estarstruct
e tem a mesma exceção.
A questão é: é por design que a propagação nula para variáveis dinâmicas sempre gera exceção, porque o objeto subjacente pode ser um tipo de valor?
oAccessViolationException
é muito feio de qualquer maneira, você consegue o mesmo quando executa o código?