public void AddExtendedProperty(T extendedProperty)
        {
            if (extendedProperty == null)
            {
                throw new ArgumentNullException("extendedProperty");
            }
            Dictionary <string, T> orAdd = this.propertyStore.GetOrAdd(extendedProperty.Namespace, () => new Dictionary <string, T>(StringComparer.OrdinalIgnoreCase));

            if (MessageTraceCollapsedProperty.IsCollapsableProperty(extendedProperty.Namespace, extendedProperty.PropertyName))
            {
                byte[] array = null;
                T      t;
                if (orAdd.TryGetValue(MessageTraceCollapsedProperty.PropertyDefinition.Name, out t))
                {
                    array = Convert.FromBase64String(t.PropertyValueBlob.Value);
                }
                array = MessageTraceCollapsedProperty.Collapse(array, extendedProperty.Namespace, extendedProperty);
                if (t == null)
                {
                    t = extendedProperty;
                    t.PropertyName          = MessageTraceCollapsedProperty.PropertyDefinition.Name;
                    t.PropertyValueGuid     = Guid.Empty;
                    t.PropertyValueInteger  = null;
                    t.PropertyValueString   = null;
                    t.PropertyValueDatetime = null;
                    t.PropertyValueDecimal  = null;
                    t.PropertyValueBit      = null;
                    t.PropertyValueLong     = null;
                    orAdd[extendedProperty.PropertyName] = t;
                    t.PropertyIndex = this.propertiesList.Count;
                    this.propertiesList.Add(extendedProperty);
                }
                t.PropertyValueBlob = new BlobType(Convert.ToBase64String(array));
                return;
            }
            orAdd[extendedProperty.PropertyName] = extendedProperty;
            extendedProperty.PropertyIndex       = this.propertiesList.Count;
            this.propertiesList.Add(extendedProperty);
        }