/// <summary>
        /// Assign tags.
        /// </summary>
        /// <param name="property">The property.</param>
        /// <param name="tags">The tags.</param>
        /// <param name="merge">A value indicating whether to merge the tags with existing tags instead of replacing them.</param>
        /// <param name="culture">A culture, for multi-lingual properties.</param>
        public static void AssignTags(this Property property, IEnumerable <string> tags, bool merge = false, string culture = null)
        {
            if (property == null)
            {
                throw new ArgumentNullException(nameof(property));
            }

            var configuration = property.GetTagConfiguration();

            if (configuration == null)
            {
                throw new NotSupportedException($"Property with alias \"{property.Alias}\" does not support tags.");
            }

            property.AssignTags(tags, merge, configuration.StorageType, configuration.Delimiter, culture);
        }
        // used by ContentRepositoryBase
        internal static IEnumerable <string> GetTagsValue(this Property property, string culture = null)
        {
            if (property == null)
            {
                throw new ArgumentNullException(nameof(property));
            }

            var configuration = property.GetTagConfiguration();

            if (configuration == null)
            {
                throw new NotSupportedException($"Property with alias \"{property.Alias}\" does not support tags.");
            }

            return(property.GetTagsValue(configuration.StorageType, configuration.Delimiter, culture));
        }