예제 #1
0
        public static CssString AppendCssStyles(this CssString cssString, params string[] cssStyles)
        {
            if (!cssStyles.Any())
            {
                return(cssString);
            }

            int totalCharLength = cssStyles.Select(x => x.Length).Sum() + cssStyles.Length;

            // Use string.Create and Spans to highly optimize the string concatenation (no allocations)
            string?combinedString = string.Create(totalCharLength, cssStyles, (chars, state) =>
            {
                int position = 0;
                foreach (string?cssString in state)
                {
                    cssString.AsSpan().CopyTo(chars[position..]);
                    position         += cssString.Length;
                    chars[position++] = ';'; // Append a semi-colon after each fragment
                }
예제 #2
0
        public static CssString SetCssStyles(this CssString cssString, params string[] cssStyles)
        {
            if (!cssStyles.Any())
            {
                return(cssString);
            }

            var totalCharLength = cssStyles.Select(x => x.Length).Sum() + cssStyles.Count();

            // Use string.Create and Spans to highly optimize the string concatenation (no allocations)
            var combinedString = string.Create(totalCharLength, cssStyles, (chars, state) =>
            {
                var position = 0;
                foreach (var cssString in state)
                {
                    cssString.AsSpan().CopyTo(chars.Slice(position));
                    position         += cssString.Length;
                    chars[position++] = ';'; // Append a semi-colon after each fragment
                }
            });

            cssString.Css = combinedString;
            return(cssString);
        }