C# 类型比较未返回预期结果

C# 类型比较未返回预期结果,c#,.net,reflection,comparison,types,C#,.net,Reflection,Comparison,Types,我使用以下代码比较类型,以便DataContractSerializer在必要时使用正确的类型重新初始化 private void InitializeSerializer(Type type) { if (this.serializer == null) { this.serializer = new DataContractSerializer(type); this.typeToSerializ

我使用以下代码比较类型,以便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;
                }
            }
        }
    }
出于某种原因,当我比较这两种类型时,结果总是真的,我从不输入最后的“if”语句并重新初始化序列化程序

我可以在比较中设置一个断点,并清楚地看到这两种类型是相同的
列表
(this.typeToSerialize.GetType())和
Post
(type.GetType())


主机和Post都共享一个共同的祖先,但这不应该影响结果。

您正在
系统上调用
GetType()
。Type
。这将返回一个描述
System.Type
自身的
System.Type
对象

这就是代码

if (this.typeToSerialize.GetType() != type.GetType())
{
   ...
}
相当于:

if(typeof(System.Type) != typeof(System.Type)) // Always false
{
   ... // Never enters here
}
我猜你真正想做的是:

if(typeToSerialize != type)
{
   ...
}

看起来更合适

看起来您正在比较两种类型对象的类型。我认为您需要比较类型对象本身

this.typeToSerialize != type

这个.typeToSerialize.GetType()和type.GetType()都将返回typeof(type)(同一个对象)。

事实上,如果在条件下丢失了两个.GetType()调用,它应该可以正常工作。太棒了。我知道这很简单。也感谢您的基本解释。如果您使用的是Visual Studio,您是否尝试过在调试器的这一行上插入断点,以及当程序在此中断时,在即时窗口中运行这两个方法以查看生成了什么输出?
this.typeToSerialize != type