我想構建一個具有較低和較高界限的簡單泛型Range
。將泛型類型轉換爲字符串並返回
public abstract class Range<T>
{
Range(T lower, T upper){/* init _lowerValue and _upperValue (both of type T) */}
// this method I would use inside TypeConverter...
public static Range<T> Parse(string source){/* build a new instance from string, but how? */}
public LowerString => ValueToString(_lowerValue);
public UpperString => ValueToString(_upperValue);
public abstract string ValueToString(T value); // must be overridden
public abstract T StringToValue(string source); // must be overridden
public string AsString => $"{LowerString},{UpperString}"; // gets the string-representation of the object
}
示例實現的用於DateTime
public class DateTimeRange : Range<DateTime>
{
public override string ValueToString(DateTime value) => value.ToString("O");
public override DateTime StringToValue(string source) => DateTime.Parse(source);
}
在我的代碼我現在可以創建一個新DateTimeRange的把它傳遞給我的API-enpoint作爲查詢參數
HTTP: /.../api/EndPoint?range=2016-10-21T18:08:03.6190988Z,2016-11-21T18:08:03.6190988Z
但是我怎樣才能轉換這回api端?在那裏,我只有串2016-10-21T18:08:03.6190988Z,2016-11-21T18:08:03.6190988Z
,知道我的位指示行動
EndpointController.Get(DateTimeRange範圍)類型{/ *做一些與所解析的範圍* /}
,但不知道如何將其轉換回Range<DateTime>
。
我已經看過TypeConverter
,但沒有發現任何有用的泛型在那裏。
在這裏使用類型轉換器正確的方式去或有任何其他的最佳做法如何實現這一點?
爲什麼不只是創建'DatTimeRange構造'需要一個'字符串'? – juharr
你想如何使用這個類?發表一個例子... –
然後,我需要爲Range的每個新實現創建一個TypeCoverter,或更改現有的一個,不是? –
KingKerosin