有时我对C#泛型中的“T”不够理解。 我有一个泛型结构体。
public struct ValueWithUnit<T>
{
public ValueWithUnit(T _value, Unit _unit)
{
Unit = _unit;
Value = _value;
}
public Unit Unit { get; }
public T Value { get; }
}
(Unit
是一个枚举类型,T
应该是数值型的,但没有可用于此目的的约束条件)。
对于WCF,我需要一个非泛型版本,其中T
为double
。 所以我想到了:
public struct DoubleValueWithUnit
{
public DoubleValueWithUnit(double _value, Unit _unit)
{
Unit = _unit;
Value = _value;
}
public DoubleValueWithUnit(ValueWithUnit<T> _valueWithUnit)
{
Unit = _valueWithUnit.Unit;
Value = Convert.ToDouble(_valueWithUnit.Value);
}
public Unit Unit { get; set; }
public double Value { get; set; }
}
但是第二个构造函数无法编译:error CS0246:找不到类型或命名空间名称“T”...
而 Convert.ToDouble 报错:
无法解析方法'ToDouble(T)',候选项是...
我知道可以向泛型类添加转换方法:
public DoubleValueWithUnit ToDoubleValueWithUnit()
{
return new DoubleValueWithUnit(Convert.ToDouble(Value), Unit);
}
可以使用这种方法。但是,在非泛型类/结构中添加具有通用参数的构造函数是否有可能呢?
ValueWithUnit<double>
而是使用DoubleValueWithUnit
? - Maarten