Esempio n. 1
0
            /// <summary>
            /// コンストラクタ>
            /// </summary>
            /// <param name="id">VOICEROID識別ID。</param>
            /// <param name="canSaveBlankText">空白文の音声保存を行えるならば true 。</param>
            public ImplBase(VoiceroidId id, bool canSaveBlankText)
            {
                if (!Enum.IsDefined(id.GetType(), id))
                {
                    throw new InvalidEnumArgumentException(
                              nameof(id),
                              (int)id,
                              id.GetType());
                }

                this.Id = id;
                this.CanSaveBlankText = canSaveBlankText;
            }
        /// <summary>
        /// VOICEROID識別IDに対応する TItem インスタンスを取得する。
        /// </summary>
        /// <param name="id">VOICEROID識別ID。</param>
        /// <returns>TItem インスタンス。</returns>
        protected TItem GetItem(VoiceroidId id)
        {
            TItem item;

            int index = this.Table.IndexOf(id);

            if (index < 0)
            {
                // 有効なIDか?
                if (!this.VoiceroidIds.Contains(id))
                {
                    throw new InvalidEnumArgumentException(
                              nameof(id),
                              (int)id,
                              id.GetType());
                }

                // アイテムを作成して追加
                item = (TItem)Activator.CreateInstance(typeof(TItem), id);
                this.Table.Add(item);
            }
            else
            {
                // 取得
                item = this.Table[index];
            }

            return(item);
        }
        /// <summary>
        /// VOICEROID識別IDに対応する TItem インスタンスを設定する。
        /// </summary>
        /// <param name="id">VOICEROID識別ID。</param>
        /// <param name="item">TItem インスタンス。</param>
        protected void SetItem(VoiceroidId id, TItem item)
        {
            if (item == null)
            {
                throw new ArgumentNullException(nameof(item));
            }
            if (item.VoiceroidId != id)
            {
                throw new ArgumentException(
                          nameof(id) + @" != " + nameof(item) + @"." + nameof(VoiceroidId));
            }

            int index = this.Table.IndexOf(id);

            if (index < 0)
            {
                // 有効なIDか?
                if (!this.VoiceroidIds.Contains(id))
                {
                    throw new InvalidEnumArgumentException(
                              nameof(item) + @"." + nameof(VoiceroidId),
                              (int)id,
                              id.GetType());
                }

                // 新規追加
                this.Table.Add(item);
            }
            else
            {
                // 更新
                this.Table[index] = item;
            }
        }