internal override Exception TryParseValue(object value, XmlNameTable nameTable, IXmlNamespaceResolver namespaceResolver, out object typedValue)
{
Exception exception;
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
string s = value as string;
typedValue = null;
if (s != null)
{
return TryParseValue(s, nameTable, namespaceResolver, out typedValue);
}
try
{
object valueToCheck = this.ValueConverter.ChangeType(value, this.ValueType, namespaceResolver);
Array valuesToCheck = valueToCheck as Array;
Debug.Assert(valuesToCheck != null);
bool checkItemLexical = _itemType.HasLexicalFacets;
bool checkItemValue = _itemType.HasValueFacets;
object item;
FacetsChecker itemFacetsChecker = _itemType.FacetsChecker;
XmlValueConverter itemValueConverter = _itemType.ValueConverter;
for (int i = 0; i < valuesToCheck.Length; i++)
{
item = valuesToCheck.GetValue(i);
if (checkItemLexical)
{
string s1 = (string)itemValueConverter.ChangeType(item, typeof(System.String), namespaceResolver);
exception = itemFacetsChecker.CheckLexicalFacets(ref s1, _itemType);
if (exception != null) goto Error;
}
if (checkItemValue)
{
exception = itemFacetsChecker.CheckValueFacets(item, _itemType);
if (exception != null) goto Error;
}
}
//Check facets on the list itself
if (this.HasLexicalFacets)
{
string s1 = (string)this.ValueConverter.ChangeType(valueToCheck, typeof(System.String), namespaceResolver);
exception = listFacetsChecker.CheckLexicalFacets(ref s1, this);
if (exception != null) goto Error;
}
if (this.HasValueFacets)
{
exception = listFacetsChecker.CheckValueFacets(valueToCheck, this);
if (exception != null) goto Error;
}
typedValue = valueToCheck;
return null;
}
catch (FormatException e)
{ //Catching for exceptions thrown by ValueConverter
exception = e;
}
catch (InvalidCastException e)
{ //Catching for exceptions thrown by ValueConverter
exception = e;
}
catch (OverflowException e)
{ //Catching for exceptions thrown by ValueConverter
exception = e;
}
catch (ArgumentException e)
{ //Catching for exceptions thrown by ValueConverter
exception = e;
}
Error:
return exception;
}