Устаревшие атрибуты и общие методы

Я добавляю новый универсальный метод Serialize для моего класса Serializer. И старый должен быть устаревшим.

[XmlRoot("a")]
public class A
{
    [XmlElement("field")]
    public string Field;
}

class Program
{
    static void Main(string[] args)
    {
        A a = new A();
        a.Field = "filed value";

        Console.WriteLine(Serialize(a));//this calls generic version !?
        Console.WriteLine();
        Console.WriteLine(Serialize(null));//ok
        Console.WriteLine();
        Console.WriteLine(Serialize<A>(a));//ok, we explicitly called generic version
    }

    [Obsolete("Use Serialize<T> instead")]
    public static string Serialize(Object pObject)
    {
        return "You have called old Serialize method";
    }

    public static string Serialize<T>(T value)
    {
        return "You have called new Serialize<T> method";
    }
}

Ожидаемый результат должен быть:

You have called old Serialize method

You have called old Serialize method

You have called new Serialize<T> method

Но результат:

You have called new Serialize<T> method

You have called old Serialize method

You have called new Serialize<T> method

Так почему же Serialize(a) вызывает универсальную версию? Есть ли ошибка для общих устаревших методов?

1 ответ

Если вы бросили a в object вы получите ожидаемый результат

Console.WriteLine(Serialize((object)a))
Другие вопросы по тегам