/// <summary> /// <see cref="IParameter"/>のイミュータブルな実装を返します。 /// </summary> /// <returns>イミュータブルなオブジェクト</returns> /// <param name="self"></param> /// <exception cref="ArgumentNullException"><paramref name="self"/>が<c>null</c>の場合</exception> public static Parameter AsImmutable(this IParameter self) { var mayImmutable = self as Parameter; if (self != null) { return(mayImmutable); } var copy = Parameter.Builder.Create().Name(self.Name); foreach (var value in self.Values) { if (value.Type == ParameterValueType.Tuple) { var original = value.TupleValue; if (original is Tuple) { copy.AddValue(value); } else { copy.AddValue(TupleParameterValue.OfValue(value.TupleValue.AsImmutable())); } } else { copy.AddValue(value); } } return(copy.Build()); }
/// <summary> /// コレクションの末尾に新しい要素を追加します。 /// </summary> /// <param name="self"></param> /// <param name="item">新しい要素</param> /// <exception cref="ArgumentNullException">新しい要素として<c>null</c>が指定された場合</exception> /// <exception cref="NotSupportedException">コレクションが読み取り専用の場合</exception> public static void Add(this NonNullCollection <IParameterValue> self, ITuple item) { if (item == null) { throw new ArgumentNullException(nameof(item)); } self.Add(TupleParameterValue.OfValue(item)); }
/// <summary> /// コレクション内の指定された位置に新しい要素を挿入します。 /// </summary> /// <param name="self"></param> /// <param name="index">要素の添字</param> /// <param name="item">新しい要素</param> /// <exception cref="ArgumentOutOfRangeException">添字が範囲外の場合</exception> /// <exception cref="ArgumentNullException">setterの引数として<c>null</c>が指定された場合</exception> /// <exception cref="NotSupportedException">コレクションが読み取り専用の場合</exception> public static void Insert(this NonNullCollection <IParameterValue> self, int index, ITuple item) { if (item == null) { throw new ArgumentNullException(nameof(item)); } self.Insert(index, TupleParameterValue.OfValue(item)); }
/// <summary> /// パラメータ値を設定します。 /// </summary> /// <param name="v">パラメータ値</param> /// <returns>ビルダー</returns> public Builder AddValue(ITuple v) { _values.Add(TupleParameterValue.OfValue(v)); return(this); }