Пример #1
0
        /// <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());
        }
Пример #2
0
 /// <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));
 }
Пример #3
0
 /// <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));
 }
Пример #4
0
 /// <summary>
 /// パラメータ値を設定します。
 /// </summary>
 /// <param name="v">パラメータ値</param>
 /// <returns>ビルダー</returns>
 public Builder AddValue(ITuple v)
 {
     _values.Add(TupleParameterValue.OfValue(v));
     return(this);
 }