Пример #1
0
            /// <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));
            }
Пример #2
0
 /// <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");
     }
 }
Пример #3
0
 /// <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());
 }
Пример #4
0
            /// <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]);
            }
Пример #5
0
            /// <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);
            }