Нулевой оператор распространения и динамическая переменная
Я смотрел на оператор нулевого распространения в C # 6 и пытался заставить его работать с переменнымиdynamic
типа но безуспешно. Рассмотрим код ниже, он компилируется, но выдает CLRAccessViolationException
во время выполнения, когда нулевое распространение применяется к динамическому объекту.
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();
}
}
Сначала я подумал, что это может быть ошибкой, но потом я подумал оstruct
s. Обычно вы не можете подать заявку?.
оператор переменной типа значения (потому что она не может быть нулевой). Но вы можете бросить его наdynamic
а затем применить оператор. Итак, я изменилсяSomeType
бытьstruct
и получил такое же исключение.
Вопрос в том, что по замыслу распространение нуль для динамических переменных всегда вызывает исключение, поскольку базовый объект может иметь тип значения?
AccessViolationException
в любом случае довольно уродливо, вы получаете то же самое при запуске кода?