예제 #1
0
        /// <summary>
        /// Creates the value.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns></returns>
        protected override object CreateValue(string value)
        {
            IList <string> items = TagExpander.SplitItemList(value);
            Array          a     = Array.CreateInstance(ItemType, items.Count);

            for (int i = 0; i < items.Count; i++)
            {
                a.SetValue(base.CreateValue(items[i]), i);
            }

            return(a);
        }
예제 #2
0
        protected internal override void Prepare(TagBatchDefinition batchDefinition, int offset)
        {
            InitPreparation(batchDefinition, offset);

            List <ValuePart> parts = new List <ValuePart>();

            foreach (string item in TagExpander.SplitItemList(Definition))
            {
                ValueItem[] vi = PrepareString(batchDefinition, item, PrepareMode.List);

                if (vi.Length == 1)
                {
                    ValueItem v = vi[0];

                    ItemValueItem   ivi;
                    StringValueItem svi;
                    if (null != (ivi = v as ItemValueItem))
                    {
                        if (string.IsNullOrEmpty(ivi.Separator) || ivi.Separator.Trim() == ";")
                        {
                            parts.Add(new ItemValuePart(ivi));
                            continue;
                        }
                    }
                    else if (null != (svi = v as StringValueItem))
                    {
                        // TODO: Shortcut single string value
                        parts.Add(new ConstantValuePart(svi.Value));
                        continue;
                    }
                }

                parts.Add(new DynamicValuePart(vi));
            }

            _parts = parts.ToArray();
        }