public Uri plusQuery(Map q)
{
if (q == null || q.isEmpty()) return this;
Map merge = m_query.dup().setAll(q);
StringBuilder s = new StringBuilder(256);
IDictionaryEnumerator en = merge.pairsIterator();
while (en.MoveNext())
{
if (s.Length > 0) s.Append('&');
string key = (string)en.Key;
string val = (string)en.Value;
appendQueryStr(s, key);
s.Append('=');
appendQueryStr(s, val);
}
Sections t = new Sections();
t.scheme = m_scheme;
t.userInfo = m_userInfo;
t.host = m_host;
t.port = m_port;
t.frag = m_frag;
t.pathStr = m_pathStr;
t.path = m_path;
t.query = merge.ro();
t.queryStr = s.ToString();
return new Uri(t);
}