コード例 #1
0
        /// <summary>
        /// Получает значение свойства объекта по ссылке на объект и имени свойства.
        /// </summary>
        /// <param name="ссылка">Ссылка на объект.</param>
        /// <param name="имяПоля">Имя поля.</param>
        /// <param name="значение">Значение поля.</param>
        /// <returns>Возвращает true, Если значение установлено, в противном случае - false.</returns>
        public bool ПопыткаПолучитьЗначение(ОбъектСсылка ссылка, string имяПоля, out object значение)
        {
            ссылка = ссылка ?? throw new ArgumentNullException("ссылка");

            if (имяПоля.Equals("Ссылка", StringComparison.OrdinalIgnoreCase))
            {
                значение = ссылка;
                return(true);
            }

            УзелМетаданных реквизит;

            if (((dynamic)ссылка.Метаданные()).еквизиты.ПопыткаНайтиПодчиненный(имяПоля, out реквизит))
            {
                if (ссылка.Пустая())
                {
                    значение = null;
                    return(true);
                }

                Dictionary <string, object> данныеОбъекта = this.ПолучитьУзелДанныхОбъекта(ссылка);
                if (данныеОбъекта.TryGetValue(имяПоля, out значение))
                {
                    return(true);
                }

                this.ЗагрузитьДанныеОбъекта(ссылка);
                return(ПопыткаПолучитьЗначение(ссылка, имяПоля, out значение));
            }

            if (((dynamic)ссылка.Метаданные()).ТабличныеЧасти.ПопыткаНайти(имяПоля, out реквизит))
            {
                if (ссылка.Пустая())
                {
                    значение = this.ПолучитьТабличнуюЧасть(ссылка, (МетаданныеТабличнаяЧасть)реквизит);
                    return(true);
                }

                Dictionary <string, object> данныеОбъекта = this.ПолучитьУзелДанныхОбъекта(ссылка);
                object таблЧасть;
                if (данныеОбъекта.TryGetValue(имяПоля, out таблЧасть))
                {
                    if (!(таблЧасть is ТабличнаяЧасть))
                    {
                        таблЧасть = this.ПолучитьТабличнуюЧасть(ссылка, (МетаданныеТабличнаяЧасть)реквизит);
                        данныеОбъекта[имяПоля] = таблЧасть;
                    }

                    значение = таблЧасть;
                    return(true);
                }

                this.ЗагрузитьДанныеОбъекта(ссылка);
                return(this.ПопыткаПолучитьЗначение(ссылка, имяПоля, out значение));
            }


            значение = null;
            return(false);
        }
コード例 #2
0
        /// <summary>
        /// Получает текстовое представление объекта по ссылке на объект.
        /// </summary>
        /// <param name="ссылка">Ссылка на объект.</param>
        /// <returns>Возвращает текстовое представление объекта.</returns>
        public string ПолучитьПредставлениеОбъекта(ОбъектСсылка ссылка)
        {
            ссылка = ссылка ?? throw new ArgumentNullException("ссылка");

            if (ссылка.Пустая())
            {
                return("");
            }

            object представление = null;
            Dictionary <string, object> данныеОбъекта = this.ПолучитьУзелДанныхОбъекта(ссылка);

            if (данныеОбъекта.TryGetValue("#", out представление))
            {
                return((string)представление);
            }

            this.ЗагрузитьДанныеОбъекта(ссылка);

            return(this.ПолучитьПредставлениеОбъекта(ссылка));
        }