public Uri(Uri baseUri, Uri relativeUri)
{
if ((object)baseUri == null)
throw new ArgumentNullException(nameof(baseUri));
if (!baseUri.IsAbsoluteUri)
throw new ArgumentOutOfRangeException(nameof(baseUri));
CreateThisFromUri(relativeUri);
string newUriString = null;
UriFormatException e;
bool dontEscape;
if (baseUri.Syntax.IsSimple)
{
dontEscape = InFact(Flags.UserEscaped);
relativeUri = ResolveHelper(baseUri, this, ref newUriString, ref dontEscape, out e);
if (e != null)
throw e;
if (relativeUri != null)
{
if ((object)relativeUri != (object)this)
CreateThisFromUri(relativeUri);
return;
}
}
else
{
dontEscape = false;
newUriString = baseUri.Syntax.InternalResolve(baseUri, this, out e);
if (e != null)
throw e;
}
_flags = Flags.Zero;
_info = null;
_syntax = null;
CreateThis(newUriString, dontEscape, UriKind.Absolute);
}