public Uri toUri()
{
StringBuilder sb = new StringBuilder();
if(scheme != null)
{
sb.Append(scheme);
sb.Append(':');
}
if(!string.IsNullOrEmpty(host))
{
sb.Append(host);
}
else
{
sb.Append('(');
for(int i = 0; i < components.Length; i++)
{
if(i != 0)
{
sb.Append(',');
}
sb.Append(components[i].ToString());
}
sb.Append(')');
}
if(path != null)
{
sb.Append('/');
sb.Append(path);
}
if(parameters.Count != 0)
{
sb.Append("?");
sb.Append(CreateQueryString(parameters));
}
if(fragment != null)
{
sb.Append("#");
sb.Append(fragment);
}
return new Uri(sb.ToString());
}