private void CreateUri(Uri baseUri, string relativeUri, bool dontEscape)
{
// Parse relativeUri and populate Uri internal data.
CreateThis(relativeUri, dontEscape, UriKind.RelativeOrAbsolute);
UriFormatException e;
if (baseUri.Syntax.IsSimple)
{
// Resolve Uris if possible OR get merged Uri String to re-parse below
Uri uriResult = ResolveHelper(baseUri, this, ref relativeUri, ref dontEscape, out e);
if (e != null)
throw e;
// If resolved into a Uri then we build from that Uri
if (uriResult != null)
{
if ((object)uriResult != (object)this)
CreateThisFromUri(uriResult);
return;
}
}
else
{
dontEscape = false;
relativeUri = baseUri.Syntax.InternalResolve(baseUri, this, out e);
if (e != null)
throw e;
}
_flags = Flags.Zero;
_info = null;
_syntax = null;
// If not resolved, we reparse modified Uri string and populate Uri internal data.
CreateThis(relativeUri, dontEscape, UriKind.Absolute);
}