Сравнение типов не возвращает ожидаемый результат - PullRequest
2 голосов
/ 07 октября 2010

Я использую следующий код для сравнения типов, чтобы 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 ]

7 голосов
/ 07 октября 2010

Вы звоните 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)
{
   ...
}
3 голосов
/ 07 октября 2010

Похоже, вы сравниваете типы двух объектов Type. Я думаю, вам нужно сравнить сами объекты типа.

this.typeToSerialize != type

И this.typeToSerialize.GetType (), и type.GetType () возвращают typeof (Type) (тот же объект).

3 голосов
/ 07 октября 2010
if (this.typeToSerialize != type)

выглядит более подходящим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...