下限と上限を持つ単純な汎用Range
を作成したいとします。私は今、クエリパラメータジェネリック型を文字列と逆に変換する
HTTPとしての私のAPI-enpointに新しいDateTimeRangeにパスを作成することができます私のコードでは
DateTime
public class DateTimeRange : Range<DateTime> { public override string ValueToString(DateTime value) => value.ToString("O"); public override DateTime StringToValue(string source) => DateTime.Parse(source); }
のための実装例では
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 }
: /.../api/EndPoint?range=2016-10-21T18:08:03.6190988Z,2016-11-21T18:08:03.6190988Z
しかし、私はこれをapi側でどのように変換できますか?そこで私は私のcontollerアクションに
を文字列
2016-10-21T18:08:03.6190988Z,2016-11-21T18:08:03.6190988Z
を持っているとタイプを知っているEndpointController.Get(DateTimeRange範囲){/ *解析された範囲で何かをする* /}
が、全く分かりませんこれをRange<DateTime>
に変換する方法
私はすでにTypeConverter
に目を通しましたが、ジェネリック医薬品については有用なものはありません。
ここでタイプコンバータを使用していますか?これを実現する方法は他にもありますか?
理由だけではなく、 'DatTimeRangeのコンストラクタを作成しません'それは'文字列 'を取る? – juharr
どのようにこのクラスを使いたいですか?投稿例... –
次に、範囲の新しい実装ごとに1つのTypeCoverterを作成するか、既存のものを変更する必要がありますか? –
KingKerosin