我想构建一个具有较低和较高界限的简单泛型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