C# 类型参数约束-无泛型(或最近的报价!)

C# 类型参数约束-无泛型(或最近的报价!),c#,parameters,constraints,C#,Parameters,Constraints,我想我想做的事是不可能的,但我想我还是会问的。我正在考虑在不同的公制度量之间实现某种自定义转换,例如将英寸转换为米和其他单位 我认为基类称为Unit,如下所示。注:我没有在任何字段中输入单位数,例如2米、5英寸等: public abstract class Unit { protected string _name; public Unit(string name) { _name = name; } } 然后,米和英寸单位的子类: publi

我想我想做的事是不可能的,但我想我还是会问的。我正在考虑在不同的公制度量之间实现某种自定义转换,例如将英寸转换为米和其他单位

我认为基类称为Unit,如下所示。注:我没有在任何字段中输入单位数,例如2米、5英寸等:

public abstract class Unit {
    protected string _name;
    public Unit(string name)
    {
        _name = name;
    }
}
然后,米和英寸单位的子类:

public class Metre : Unit {
    public Metre() : base("Metre")
    {
    }
}

public class Inch : Unit {
    public Metre() : base("Inch")
    {
    }
}
我希望有一个类可以处理这些单位之间的转换。比如:

public static class UnitConvertor
{
    public Unit Convert(Unit from, Type to) : where Type extends/inherits from Unit
    {
        // do the conversion
        return the instance of Type to;
    }
}

有什么想法吗?

如果单位都提前知道,您可以使用:


Convert(T from,T to)其中T:Unit可能是合适的解决方案。vcsjones-您是指Convert(engineeringingunit from,T to)其中T:Unit吗?您需要传递一个T的实例——即一个新的Meter作为第二个参数——理想情况下,您不希望调用方实例化返回类型。你只想说,这是一个英寸的例子,给我一个米当量。除非有一个可行的泛型解决方案。我看了又看,但没有看到任何合适的。请随意分享我可能错过的任何信息。是的-如果你想添加一个新单元,你必须更新各个类,不要说它很漂亮;-)是的,会有很多单位。我把2放在例子中讨论,但有点像这个例子。一个“解决办法”可能是所有单位都可以转换为米,米可以转换为所有其他单位-kludgy,但可以在converter类中使用它来绕过N*N转换。
public class Metre : Unit 
{
    public Metre() : base("Metre")
    {
    }

    public static implicit operator Inch(Metre m)  
    { 
        return new Inch(39.37 * m.Value);
    }
}