/// <summary>Вычисление выражения.</summary> /// <typeparam name="T">тип результата вычисления выражения</typeparam> /// <param name="x_sTerm">выражение</param> /// <returns>результат вычисления выражения</returns> public T EvaluateTerm <T>(string x_sTerm) { // Компиляция сборки, содержащей класс с единственным методом, возвращающим результат вычисления выражения. CompilerResults c_crAssembly = CodeDomProvider.CreateProvider("c#").CompileAssemblyFromSource( new CompilerParameters(new string[] { "mscorlib.dll" }) { GenerateInMemory = true }, String.Format( n_sTemplate_AssemblyContent, n_sDefault_ClassName, n_sDefault_MethodName, x_sTerm)); // Проверка ошибок при компиляции сборки. if (c_crAssembly.Errors.HasErrors) { #region Формирование сообщения об ошибке компиляции StringBuilder c_sbErrors = new StringBuilder(); foreach (CompilerError c_eError in c_crAssembly.Errors) { c_sbErrors.AppendLine(c_eError.ErrorText); } throw new ArgumentException( String.Format( CResource.LoadString("IDS_ERR_COMPILERERROR"), x_sTerm, c_sbErrors.ToString()), "x_sExpression"); #endregion } // Выполнение метода, возвращающего результат вычисления выражения. return((T)c_crAssembly.CompiledAssembly.GetType(n_sDefault_ClassName).GetMethod(n_sDefault_MethodName).Invoke(null, null)); }
/// <summary>Формирование строки с названием месяца.</summary> /// <param name="x_lMonth">индекс месяца. Замечание: месяцы нумеруются начиная с 1.</param> /// <returns>строка с названием месяца.</returns> public static string GetMonth(long x_lMonth) { string[] c_sMonths = new string[] { CResource.LoadString("IDS_VAL_JANUARY"), CResource.LoadString("IDS_VAL_FEBRUARY"), CResource.LoadString("IDS_VAL_MARCH"), CResource.LoadString("IDS_VAL_APRIL"), CResource.LoadString("IDS_VAL_MAY"), CResource.LoadString("IDS_VAL_JUNE"), CResource.LoadString("IDS_VAL_JULY"), CResource.LoadString("IDS_VAL_AUGUST"), CResource.LoadString("IDS_VAL_SEPTEMBER"), CResource.LoadString("IDS_VAL_OCTOBER"), CResource.LoadString("IDS_VAL_NOVEMBER"), CResource.LoadString("IDS_VAL_DECEMBER") }; if ((x_lMonth >= 1) && (x_lMonth <= 12)) { return(c_sMonths[x_lMonth - 1]); } else { throw new ArgumentException( CResource.LoadString(String.Format("IDS_ERR_MONTHOUTOFRANGE", x_lMonth)), "x_lMonth"); } }
/// <summary>Удаление тега из списка.</summary> /// <param name="x_stTag">тег</param> /// <remarks>Перед удалением тег переводится в нижний регистр с удалением начальных и конечных знаков пробела.</remarks> public void DetachTag(string x_sTag) { if (String.IsNullOrEmpty(x_sTag)) { throw new ArgumentException( CResource.LoadString("IDS_ERR_EMPTYTAGAVLUE"), "x_sTag"); } m_hsTags.Remove(x_sTag.ToLower().Trim()); }
/// <summary>Получение доступа к требуемому журналу сообщений.</summary> /// <param name="x_tpJournalType">тип журнала.</param>> /// <returns>требуемый журнал.</returns>> public static CJournal Journal(Type x_tpJournalType) { if (!m_dcJournals.ContainsKey(x_tpJournalType)) { // Создание требуемого журнала сообщений, если он не существует. try { m_dcJournals.Add(x_tpJournalType, (CJournal)Activator.CreateInstance(x_tpJournalType)); } catch { throw new ArgumentException( String.Format( CResource.LoadString("IDS_ERR_INVALIDJOURNALTYPE"), x_tpJournalType.FullName), "x_tpJournalType"); } } return(m_dcJournals[x_tpJournalType]); }
/// <summary>Создание нового элемента с указанной информацией в атрибутах в указанном узле документа XML.</summary> /// <param name="x_xnElementParent">узел документа XML, в который добавляется новый элемент.</param> /// <param name="x_sElementName">имя нового элемента.</param> /// <param name="x_lElementType">тип нового элемента.</param> /// <param name="x_sElementData">данные нового элемента.</param> public static void AddElement( XmlNode x_xnElementParent, string x_sElementName, ElementTypeEnum x_lElementType, params string[] x_sElementData) { // Создание нового элемента. XmlNode c_xnElement = x_xnElementParent.OwnerDocument.CreateNode("element", x_sElementName, ""); switch (x_lElementType) { case ElementTypeEnum.ATTRIBUTE_ELEMENT: for (int i = 0; i < x_sElementData.Length; i += 2) { // Добавление атрибута к новому элементу и присваивание ему значения. c_xnElement.Attributes.Append(x_xnElementParent.OwnerDocument.CreateAttribute(x_sElementData[i])); c_xnElement.Attributes[x_sElementData[i]].InnerText = x_sElementData[i + 1]; } break; case ElementTypeEnum.NODE_ELEMENT: for (int i = 0; i < x_sElementData.Length; i += 2) { // Добавление дочернего узла к новому элементу и присваивание ему значения. c_xnElement.AppendChild(x_xnElementParent.OwnerDocument.CreateNode(XmlNodeType.Element, x_sElementData[i], "")); c_xnElement.LastChild.InnerText = x_sElementData[i + 1]; } break; default: throw new Exception( String.Format( CResource.LoadString("IDS_ERR_INVALIDELEMENTTYPE"), Enum.Format(typeof(ElementTypeEnum), x_lElementType, "G"))); } // Добавление созданного элемента к родительскому элементу документа XML. x_xnElementParent.AppendChild(c_xnElement); }