类型比较不返回预期结果

时间:2010-10-07 13:39:46

标签: c# .net 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;
                }
            }
        }
    }

出于某种原因,当我比较两种类型时,结果总是正确的,我从不输入最终的'if'语句并重新初始化我的序列化器。

我可以在比较中设置一个断点,并清楚地看到这两种类型 List<Host>(this.typeToSerialize.GetType())和 Post(type.GetType())

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

3 个答案:

答案 0 :(得分:7)

您正在GetType()上致电System.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)
{
   ...
}

答案 1 :(得分:3)

if (this.typeToSerialize != type)

看起来更合适

答案 2 :(得分:3)

看起来好像在比较两个Type对象的类型。我想你需要比较类型对象本身。

this.typeToSerialize != type

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