为什么我不能从通用对象运行以下方法?

Wil*_*Wil 4 c# generics syntax

我(尝试)了解仿制药,我认为我理解它们.我有以下泛型类的代码:

    /// <summary>
    /// generics
    /// </summary>
    class Point<T> where T : IConvertible
    {
        public T X;


        NumberFormatInfo nf = NumberFormatInfo.CurrentInfo;

        public double Subtract(Point<T> pt)
        {
            return (X.ToDouble(nf) + pt.X.ToDouble(nf));
        }

    }
Run Code Online (Sandbox Code Playgroud)

Main(),我可以创建对象罚款:

        Point<int> pt = new Point<int>();
        Point<double> pt2 = new Point<double>();
        Point<string> pt3 = new Point<string>();

        pt.X = 10;

        pt2.X = 10;

        pt3.X = "10";
Run Code Online (Sandbox Code Playgroud)

现在,我可以Subtract在两个ints,doubles甚至strings 上运行Method ,但我不能运行混合,我认为我可以因为.ToDouble转换而运行.

如果我尝试运行,Console.WriteLine(pt.Subtract(pt2));我会收到以下错误:

Error   1   The best overloaded method match for Date.Point<int>.Subtract(Date.Point<int>)' has some invalid arguments

Error   2   Argument 1: cannot convert from 'Date.Point<double>' to 'Date.Point<int>'   
Run Code Online (Sandbox Code Playgroud)

代码本身并不是那么重要,因为我只是想了解/学习泛型,所以我只想了解这里有什么问题以及为什么它不起作用......实际的方法并不重要/不会使用.

SLa*_*aks 6

你的Subtract方法需要一个Point<T>.
T这是类的类型参数,这意味着它只能采用Point相同的类型.

您需要提供Subtract一个单独的通用参数,以便它可以取Point<U>任何一个U.