Существует два способа явного приведения объекта: либо
MyClass.indoorColor = (System.Drawing.Color)parsedObject;
, либо безопасный метод приведения через оператор as, который вы используете в этом вопросе.Прямое приведение вызовет InvalidCastException, если parsedObject не имеет правильный тип, где безопасный случай вернет ноль.Тем не менее, null не является допустимым значением для структуры и, следовательно, сообщение об ошибке, которое вы получаете.
Есть два способа обойти это, оба связаны с использованием обнуляемого типа.
Обнуляемый типобертка вокруг типа структуры, которая позволяет значению быть дополнительно нулевым и задается либо длинным форматом System.Nullable<System.Drawing.Color>
, либо коротким форматом, который является просто?в конце типа System.Drawing.Color?
Так что либо измените определение типа indoorColor на System.Drawing.Color?
, а затем выполните
MyClass.indoorColor = parsedObject as System.Drawing.Color?;
Или выберите значение по умолчанию, которое вы хотите использоватьв случае несовместимого типа (я собираюсь использовать прозрачный здесь) и использовать следующий синтаксис:
MyClass.indoorColor = parsedObject as System.Drawing.Color? ??
System.Drawing.Color.Transparent;
The ??запись означает использование значения слева, если оно не равно null
, в противном случае используйте значение справа;