public virtual Object GetObject(String name, bool ignoreCase)
{
Hashtable copyOfTable = Table; // Avoid a race with Dispose
if (copyOfTable == null)
throw new ObjectDisposedException(null, Environment.GetResourceString("ObjectDisposed_ResourceSet"));
if (name==null)
throw new ArgumentNullException("name");
Object obj = copyOfTable[name];
if (obj != null || !ignoreCase)
return obj;
// Try doing a case-insensitive lookup.
Hashtable caseTable = _caseInsensitiveTable; // Avoid race with Close
if (caseTable == null) {
caseTable = new Hashtable(StringComparer.OrdinalIgnoreCase);
#if _DEBUG
//Console.WriteLine("ResourceSet::GetObject loading up case-insensitive data");
BCLDebug.Perf(!ignoreCase, "Using case-insensitive lookups is bad perf-wise. Consider capitalizing "+name+" correctly in your source");
#endif
IDictionaryEnumerator en = copyOfTable.GetEnumerator();
while (en.MoveNext()) {
caseTable.Add(en.Key, en.Value);
}
_caseInsensitiveTable = caseTable;
}
return caseTable[name];
}