Jam*_*uth 2 .net c# reflection comparison types
我使用以下代码比较类型,以便DataContractSerializer在必要时使用正确的类型重新初始化.
private void InitializeSerializer(Type type)
{
if (this.serializer == null)
{
this.serializer = new DataContractSerializer(type);
this.typeToSerialize = type;
}
else
{
if (this.typeToSerialize != null)
{
if (this.typeToSerialize.GetType() != type.GetType())
{
this.serializer = new DataContractSerializer(type);
this.typeToSerialize = type;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当我比较两种类型时,结果始终为真,我从不输入最终的'if'语句并重新初始化我的序列化器.
我可以在比较中设置一个断点,并清楚地看到这两种类型是
List<Host>(this.typeToSerialize.GetType())和
Post(type.GetType())
Host和Post共享一个共同的祖先,但这不应该影响结果.
你正在呼唤GetType()一个System.Type.这将返回System.Type描述System.Type自身的对象 .
这使得代码
if (this.typeToSerialize.GetType() != type.GetType())
{
...
}
Run Code Online (Sandbox Code Playgroud)
相当于:
if(typeof(System.Type) != typeof(System.Type)) // Always false
{
... // Never enters here
}
Run Code Online (Sandbox Code Playgroud)
我猜你真正想要做的是:
if(typeToSerialize != type)
{
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |