public XmlName AddName(string prefix, string localName, string ns, IXmlSchemaInfo schemaInfo) {
if (prefix == null) {
prefix = string.Empty;
}
if (ns == null) {
ns = string.Empty;
}
int hashCode = XmlName.GetHashCode(localName);
for (XmlName e = entries[hashCode & mask]; e != null; e = e.next) {
if (e.HashCode == hashCode
&& ((object)e.LocalName == (object)localName
|| e.LocalName.Equals(localName))
&& ((object)e.Prefix == (object)prefix
|| e.Prefix.Equals(prefix))
&& ((object)e.NamespaceURI == (object)ns
|| e.NamespaceURI.Equals(ns))
&& e.Equals(schemaInfo)) {
return e;
}
}
prefix = nameTable.Add(prefix);
localName = nameTable.Add(localName);
ns = nameTable.Add(ns);
int index = hashCode & mask;
XmlName name = XmlName.Create(prefix, localName, ns, hashCode, ownerDocument, entries[index], schemaInfo);
entries[index] = name;
if (count++ == mask) {
Grow();
}
return name;
}