private static ProxyAddressTemplate Parse(string proxyAddressTemplateString, string prefixString, string addressTemplateString)
        {
            if (prefixString == null)
            {
                throw new ArgumentNullException("prefixString");
            }
            if (addressTemplateString == null)
            {
                throw new ArgumentNullException("addressTemplateString");
            }
            ProxyAddressPrefix proxyAddressPrefix;

            if (prefixString.Length == 0 && SmtpProxyAddressTemplate.IsValidSmtpAddressTemplate(addressTemplateString))
            {
                proxyAddressPrefix = ProxyAddressPrefix.Smtp;
            }
            else
            {
                proxyAddressPrefix = ProxyAddressPrefix.GetPrefix(prefixString);
            }
            bool flag = StringComparer.Ordinal.Equals(proxyAddressPrefix.PrimaryPrefix, prefixString);
            ProxyAddressTemplate result;

            try
            {
                ProxyAddressTemplate proxyAddressTemplate = proxyAddressPrefix.GetProxyAddressTemplate(addressTemplateString, flag);
                proxyAddressTemplate.RawProxyAddressBaseString = proxyAddressTemplateString;
                result = proxyAddressTemplate;
            }
            catch (ArgumentOutOfRangeException parseException)
            {
                result = new InvalidProxyAddressTemplate(proxyAddressTemplateString, proxyAddressPrefix, addressTemplateString, flag, parseException);
            }
            return(result);
        }
 protected override ValidationError ValidateValue(T item)
 {
     if (item is InvalidProxyAddress)
     {
         InvalidProxyAddress invalidProxyAddress = item as InvalidProxyAddress;
         return(new PropertyValidationError(DataStrings.ExceptionUsingInvalidAddress(invalidProxyAddress.ToString(), invalidProxyAddress.ParseException.Message), this.PropertyDefinition, invalidProxyAddress));
     }
     if (item is InvalidProxyAddressTemplate)
     {
         InvalidProxyAddressTemplate invalidProxyAddressTemplate = item as InvalidProxyAddressTemplate;
         return(new PropertyValidationError(DataStrings.ExceptionUsingInvalidAddress(invalidProxyAddressTemplate.ToString(), invalidProxyAddressTemplate.ParseException.Message), this.PropertyDefinition, invalidProxyAddressTemplate));
     }
     return(base.ValidateValue(item));
 }