コード例 #1
0
        /// <summary>
        /// 将 <see cref="ComplexMessage"/> 实例解构为 13 个不同的 <see cref="MessageElement"/> 实例。
        /// 如果要求的 <see cref="MessageElement"/> 实例数量大于 <paramref name="message"/> 的元素数量,则超出部分的值为 <see langword="null"/>。
        /// </summary>
        /// <exception cref="ArgumentNullException"><paramref name="message"/> 为 <see langword="null"/>。</exception>
        public static void Deconstruct(
            this ComplexMessage message,
            out MessageElement element0,
            out MessageElement element1,
            out MessageElement element2,
            out MessageElement element3,
            out MessageElement element4,
            out MessageElement element5,
            out MessageElement element6,
            out MessageElement element7,
            out MessageElement element8,
            out MessageElement element9,
            out MessageElement element10,
            out MessageElement element11,
            out MessageElement element12)
        {
            if (message is null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            element0  = message.ElementAtOrDefault(0);
            element1  = message.ElementAtOrDefault(1);
            element2  = message.ElementAtOrDefault(2);
            element3  = message.ElementAtOrDefault(3);
            element4  = message.ElementAtOrDefault(4);
            element5  = message.ElementAtOrDefault(5);
            element6  = message.ElementAtOrDefault(6);
            element7  = message.ElementAtOrDefault(7);
            element8  = message.ElementAtOrDefault(8);
            element9  = message.ElementAtOrDefault(9);
            element10 = message.ElementAtOrDefault(10);
            element11 = message.ElementAtOrDefault(11);
            element12 = message.ElementAtOrDefault(12);
        }
コード例 #2
0
        /// <summary>
        /// 将 <see cref="ComplexMessage"/> 实例解构为 1 个不同的 <see cref="MessageElement"/> 实例。
        /// 如果要求的 <see cref="MessageElement"/> 实例数量大于 <paramref name="message"/> 的元素数量,则超出部分的值为 <see langword="null"/>。
        /// </summary>
        /// <exception cref="ArgumentNullException"><paramref name="message"/> 为 <see langword="null"/>。</exception>
        public static void Deconstruct(
            this ComplexMessage message,
            out MessageElement element0)
        {
            if (message is null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            element0 = message.ElementAtOrDefault(0);
        }
コード例 #3
0
        /// <summary>
        /// 将 <see cref="ComplexMessage"/> 实例解构为 5 个不同的 <see cref="MessageElement"/> 实例。
        /// 如果要求的 <see cref="MessageElement"/> 实例数量大于 <paramref name="message"/> 的元素数量,则超出部分的值为 <see langword="null"/>。
        /// </summary>
        /// <exception cref="ArgumentNullException"><paramref name="message"/> 为 <see langword="null"/>。</exception>
        public static void Deconstruct(
            this ComplexMessage message,
            out MessageElement element0,
            out MessageElement element1,
            out MessageElement element2,
            out MessageElement element3,
            out MessageElement element4)
        {
            if (message is null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            element0 = message.ElementAtOrDefault(0);
            element1 = message.ElementAtOrDefault(1);
            element2 = message.ElementAtOrDefault(2);
            element3 = message.ElementAtOrDefault(3);
            element4 = message.ElementAtOrDefault(4);
        }
コード例 #4
0
 public ComplexMessage Add(MessageElement element) => ToComplexMessage().Add(element);
コード例 #5
0
        /// <summary>
        /// 使用指定的分隔符从 <see cref="IEnumerable{T}"/> 创建 <see cref="ComplexMessage"/>。
        /// </summary>
        /// <param name="elements">要用于创建 <see cref="ComplexMessage"/> 的消息元素集合。</param>
        /// <param name="separator">要用作分隔符的 <see cref="MessageElement"/> 实例。</param>
        /// <returns>
        /// 一个包含 <paramref name="elements"/> 中所有成员的 <see cref="ComplexMessage"/> 实例,这些成员以 <paramref name="separator"/> 分隔。
        /// 如果 <paramref name="elements"/> 没有成员,则该方法返回一个空的 <see cref="ComplexMessage"/> 实例。
        /// </returns>
        /// <exception cref="ArgumentNullException"><paramref name="elements"/> 为 <see langword="null"/>。</exception>
        public static ComplexMessage ToComplexMessage(this IEnumerable <MessageElement> elements, MessageElement separator)
        {
            if (elements is null)
            {
                throw new ArgumentNullException(nameof(elements));
            }

            if (!elements.Any())
            {
                return(new ComplexMessage());
            }

            if (elements.Count() is 1)
            {
                return(new ComplexMessage(elements.First()));
            }

            return(new ComplexMessage(GetMessageElements()));

            IEnumerable <MessageElement> GetMessageElements()
            {
                yield return(elements.First());

                foreach (var element in elements.Skip(1))
                {
                    yield return(separator);

                    yield return(element);
                }
            }
        }