public ushort FindID(ushort skillID, SKILL_STRINGS_LABEL label, SystemLanguage?lang = null)
        {
            using (var _reader = FileIO.Instance.CSVReader <SkillStringsTable>(TablePath))
            {
                List <SkillStringsTable> _rows = _reader.Where(_row => {
                    // field
                    FieldInfo _skillIDInfo = _row.GetType().GetField(ColumnSkillIDName, BindingFlags.Instance | BindingFlags.Public);
                    if (_skillIDInfo == null)
                    {
                        return(false);
                    }

                    FieldInfo _labelInfo = _row.GetType().GetField(ColumnLabelName, BindingFlags.Instance | BindingFlags.Public);
                    if (_labelInfo == null)
                    {
                        return(false);
                    }

                    return(((short)_skillIDInfo.GetValue(_row) == skillID) &&
                           ((SKILL_STRINGS_LABEL)_labelInfo.GetValue(_row) == label));
                }).ToList();

                if (_rows.Count == 0)
                {
                    throw new System.NullReferenceException();
                }

                if (_rows.Count > 1)
                {
                    throw new System.Exception("Find Unique but got duplicated!");
                }

                return(_rows[0].ID);
            }
        }
        public MultiLangString <SkillStringsTable> GetMultiLangStringWithParam(ushort skillID, int level, SKILL_STRINGS_LABEL label)
        {
            ushort _tableID = FindID(skillID, label);
            MultiLangString <SkillStringsTable> _multiLang;
            var _parameterList = GetSkillDescriptionParameter(skillID, level);

            if (_parameterList.Count > 0)
            {
                var _parameterArray = _parameterList.Cast <object> ().ToArray();

                _multiLang = new MultiLangString <SkillStringsTable> (_tableID, SkillStringsTableReader.Instance, _parameterArray);
            }
            else
            {
                _multiLang = new MultiLangString <SkillStringsTable> (_tableID, SkillStringsTableReader.Instance);
            }

            return(_multiLang);
        }
        public MultiLangString <SkillStringsTable> GetMultiLangStringWithoutParam(ushort skillID, SKILL_STRINGS_LABEL label)
        {
            ushort _tableID = FindID(skillID, label);

            MultiLangString <SkillStringsTable> _multiLang = new MultiLangString <SkillStringsTable> (_tableID, SkillStringsTableReader.Instance);

            return(_multiLang);
        }