有時候,我真不明白那些T
C#的泛型的權利。我有一個通用的結構初始化非通用對象與通用對象
public struct ValueWithUnit<T>
{
public ValueWithUnit(T _value, Unit _unit)
{
Unit = _unit;
Value = _value;
}
public Unit Unit { get; }
public T Value { get; }
}
(Unit
是enum
,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: The type or namespace name 'T' could not be found ...
和Convert.ToDouble與 Cannot resolve method 'ToDouble(T)' Candidates are...
抱怨我知道我可以添加一個轉換方法泛型類:
public DoubleValueWithUnit ToDoubleValueWithUnit()
{
return new DoubleValueWithUnit(Convert.ToDouble(Value), Unit);
}
工程。但有沒有可能添加一個具有泛型參數的構造函數到非泛型類/結構?
你爲什麼不只是使用'ValueWithUnit'而不是DoubleValueWithUnit'的'? –
Maarten
你試圖做什麼[是不可能的(https://開頭計算器。com/questions/700966/generic-type-in-constructor) - 但是,Maarten的建議可能是這裏最好的解決方案 – Rob
@Maarten,因爲WCF與泛型兼容...... –