/// <summary> /// コピーコンストラクタ。 /// </summary> /// <param name="src">コピー元。</param> public MovableValue(MovableValue <TConstants> src) { if (src == null) { throw new ArgumentNullException(nameof(src)); } this.Begin = src.Begin; this.End = src.End; this.MoveMode = src.MoveMode; this.IsAccelerating = src.IsAccelerating; this.IsDecelerating = src.IsDecelerating; this.Interval = src.Interval; }
/// <summary> /// 拡張編集オブジェクトファイルにおける文字列表現値のパースを試みる。 /// </summary> /// <typeparam name="T">MovableValueBase 派生クラス型。</typeparam> /// <param name="value">文字列表現値。</param> /// <param name="result">パース結果の設定先。</param> /// <returns>パースに成功したならば true 。そうでなければ false 。</returns> public static bool TryParse(string value, out MovableValue <TConstants> result) { result = null; if (value == null) { return(false); } var vals = value.Split(','); if (vals.Length < 1) { return(false); } // 開始値 if (!decimal.TryParse(vals[0], out decimal begin)) { return(false); } if (vals.Length == 1) { result = new MovableValue <TConstants>(begin); } else if (vals.Length == 3 || vals.Length == 4) { // 終端値 if (!decimal.TryParse(vals[1], out decimal end)) { return(false); } // 移動モード&加減速 if ( !TryParseMoveMode( vals[2], out var moveMode, out bool accel, out bool decel)) { return(false); } // 追加パラメータ int param = 0; if (vals.Length == 4) { if (!int.TryParse(vals[3], out param)) { return(false); } } result = new MovableValue <TConstants>( begin, end, moveMode, accel, decel, param); } else { return(false); } return(true); }