0

我正在为我的 Serializer 类添加一个新的通用 Serialize 方法。旧的肯定已经过时了。

[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) 调用通用版本呢?通用过时方法是否存在错误?

4

1 回答 1

1

如果你投到aobject会得到预期的结果

Console.WriteLine(Serialize((object)a))
于 2014-01-26T17:06:05.657 回答