Beispiel #1
0
        /// <summary>
        /// 要素推測・生成
        /// </summary>
        /// <param name="pObject">推測元オブジェクト</param>
        /// <returns>object</returns>
        /// <seealso cref="Calculators.OperatorKeyWord"/>
        /// <remarks>
        /// pObjectから推測した要素を作成しこれを返します。
        /// 推測可能なオブジェクト(文字列)は OperatorKeyWord を参照のこと。
        /// OperatorKeyWord に無く、かつIConvertibleを継承するオブジェクトは数値と見なされます。
        /// (ex)
        /// Make("(");
        /// </remarks>
        static public object Make(object pObject)
        {
            object obj = CalculatorItemBase.Make(InstanceTable, pObject);

            if (obj != null)
            {
                return(obj);
            }

            if (pObject is IConvertible)
            {
                return(new CalculatorValue(((IConvertible)pObject).ToDouble(CultureInfo.CurrentCulture.NumberFormat)));
            }

            return(null);
        }
Beispiel #2
0
        /// <summary>
        /// 要素登録(自動解釈型)
        /// </summary>
        /// <param name="pObject">要素</param>
        /// <remarks>
        /// 様々な型の要素を判別し、登録します。
        /// 詳しくはCalculatorItemBase.Make()メソッドを参照。
        /// (ex)
        /// Entry(1);
        /// Entry("+");
        /// Entry(2);
        /// </remarks>
        /// <seealso cref="CalculatorItemBase.Make"/>
        public void Entry(object pObject)
        {
            object obj;

            string str = pObject.ToString();

            if ((str.Length > 0) && (str[0] == '@'))
            {
                obj = this.GetItemEventHandler(str);
            }
            else
            {
                obj = CalculatorItemBase.Make(pObject);
            }

            if (obj == null)
            {
                throw new ArgumentNullException();
            }

            this.Entry((CalculatorItemBase)obj);
        }