При реализации ISerializable вы пишете такой код для выполнения пользовательской десериализации ...
(Примечание: это тривиальный пример и не требует пользовательской десериализации).
protected ClientInformation(SerializationInfo info, StreamingContext context)
{
_culture = (string)info.GetValue("Culture", typeof(string))
}
Для метода GetValue требуется тип, который вы хотите десериализовать, который в соответствии с помощью intellisense выполняет следующее
"Если сохраненное значение не может быть преобразовано в этот тип, система выдаст Систему.Исключение InvalidCast "
Означает ли это, что в моем примере оператора выполняются два приведения?
Кроме того, какой смысл добавлять этот параметр типа, потому что если я напишу следующее
_culture = info.GetValue("Culture", typeof(string))
... это все равно не скомпилируется, так как вы «не можете неявно преобразовать тип« объект »в« строку »».Таким образом, это означает, что я должен привести объект в любом случае, и поэтому, если приведение недействительно, я получу исключение InvalidCastException через мое собственное приведение в любом случае.
Это будет Появляется , что здесь происходит два приведения, а также, в любом случае, ошибка может произойти только во время выполнения (без проверки типа компиляции, которая могла бы быть достигнута с помощью обобщений), если никто не знает причину, почему это происходит?
Обновление: Может быть, за кадром используется оператор "is" для проверки типа, что ожидается?"Is" автоматически пытается разыграть?