在实现 ISerializable 时,您编写这样的代码来执行自定义反序列化......
(注意:这是一个简单的例子,不保证自定义反序列化)。
protected ClientInformation(SerializationInfo info, StreamingContext context)
{
_culture = (string)info.GetValue("Culture", typeof(string))
}
GetValue 方法需要您希望反序列化的类型,根据智能感知帮助执行以下操作
“如果存储的值不能转换成这种类型,系统会抛出 System.InvalidCast 异常”
这是否意味着在我的示例语句中执行了两个强制转换?
另外,添加此类型参数有什么意义,因为如果我编写以下内容
_culture = info.GetValue("Culture", typeof(string))
...这无论如何都不会编译,因为您“无法将类型'object'隐式转换为'string'”。所以这意味着无论如何我都必须转换对象,因此如果转换无效,无论如何我都会通过我自己的转换获得 InvalidCastException 。
看起来这里发生了两次强制转换,同样在任何情况下都只能在运行时发生错误(没有可以通过泛型实现的编译类型检查),除非有人知道发生这种情况的原因吗?
更新:可能是在幕后使用“is”运算符来检查类型是预期的吗?“是”是否会自动尝试投射?