internal TraceLoggingTypeInfo(
            Type dataType,
            string name,
            EventLevel level,
            EventOpcode opcode,
            EventKeywords keywords,
            EventTags tags)
        {
            if (dataType == null)
            {
                throw new ArgumentNullException("dataType");
            }

            if (name == null)
            {
                throw new ArgumentNullException("eventName");
            }

            Contract.EndContractBlock();

            Statics.CheckName(name);

            this.name                 = name;
            this.keywords             = keywords;
            this.level                = level;
            this.opcode               = opcode;
            this.tags                 = tags;
            this.dataType             = dataType;
            this.propertyValueFactory = PropertyValue.GetFactory(dataType);
        }
        internal TraceLoggingTypeInfo(Type dataType)
        {
            if (dataType == null)
            {
                throw new ArgumentNullException(nameof(dataType));
            }

            this.name                 = dataType.Name;
            this.dataType             = dataType;
            this.propertyValueFactory = PropertyValue.GetFactory(dataType);
        }
        internal TraceLoggingTypeInfo(Type dataType)
        {
            if (dataType == null)
            {
                throw new ArgumentNullException("dataType");
            }

            Contract.EndContractBlock();

            this.name                 = dataType.Name;
            this.dataType             = dataType;
            this.propertyValueFactory = PropertyValue.GetFactory(dataType);
        }