/// <summary>
        /// Создает ссылку на элемент перечисления.
        /// </summary>
        /// <param name="полноеИмяТипа">Полное имя типа объекта, например "Перечисление.СтавкиНДС".</param>
        /// <param name="указатель">Имя (идетификатор) элемента.</param>
        /// <param name="синоним">Синоним элемента.</param>
        /// <returns>Возвращает ссылку на элемент перечисления.</returns>
        public ПеречислениеСсылка ПолучитьПеречислениеСсылку(string полноеИмяТипа, string указатель, string синоним = "")
        {
            УзелМетаданных узелМетаданных;

            if (!this.Клиент.Метаданные.ПопыткаПолучить(полноеИмяТипа, out узелМетаданных))
            {
                throw new ArgumentException(String.Format("Ошибка при получении ссылки на объект. Не удалось обнаружить объект метаданных \"{0}\".", полноеИмяТипа), "полноеИмяТипа");
            }
            if (((МетаданныеОбъект)узелМетаданных).ТипКоллекции() != ТипКоллекции.Перечисление)
            {
                throw new Exception("Указан неверный тип коллекции.");
            }

            Guid   идСсылки = КонтекстДанных.ПолучитьОбобщенныйИдентификаторСсылки(полноеИмяТипа, указатель);
            Ссылка ссылка   = null;
            WeakReference <Ссылка> слабСсылка;

            if (this.references.TryGetValue(идСсылки, out слабСсылка) && слабСсылка.TryGetTarget(out ссылка))
            {
                return((ПеречислениеСсылка)ссылка);
            }

            ссылка = new ПеречислениеСсылка(this.bromClient, узелМетаданных.Имя(), указатель, синоним);

            this.references[идСсылки] = new WeakReference <Ссылка>(ссылка);
            return((ПеречислениеСсылка)ссылка);
        }
 private static Guid ПолучитьОбобщенныйИдентификаторСсылки(Ссылка ссылка)
 {
     if (ссылка is ОбъектСсылка)
     {
         ОбъектСсылка текСсылка = ссылка as ОбъектСсылка;
         return(ПолучитьОбобщенныйИдентификаторСсылки(текСсылка.ПолноеИмяТипа(), текСсылка.УникальныйИдентификатор().ToString()));
     }
     else
     {
         ПеречислениеСсылка текСсылка = ссылка as ПеречислениеСсылка;
         return(ПолучитьОбобщенныйИдентификаторСсылки(текСсылка.ПолноеИмяТипа(), текСсылка.Имя));
     }
 }
Example #3
0
        public ValueEnumRef(ПеречислениеСсылка value)
        {
            this.Type = value != null?value.ПолноеИмяТипа() : throw new System.ArgumentNullException("value");

            this.Value = value.Имя;
        }