We need you! We're working hard on the next version of Developer Fusion -
Let us know what you think we should be up to!
- namespace System.Resources
- {
- using System;
- using System.Collections;
- using System.IO;
- using System.Runtime.Remoting.Activation;
- using System.Globalization;
- using System.Security.Permissions;
- using System.Runtime.InteropServices;
- using System.Reflection;
- using System.Runtime.Serialization;
- using System.Runtime.Versioning;
-
-
-
-
-
-
-
- [Serializable()]
- [System.Runtime.InteropServices.ComVisible(true)]
- public class ResourceSet : IDisposable, IEnumerable
- {
- [NonSerialized()]
- protected IResourceReader Reader;
- protected Hashtable Table;
-
- private Hashtable _caseInsensitiveTable;
-
-
- protected ResourceSet()
- {
-
-
- Table = new Hashtable(0);
- }
-
-
-
- internal ResourceSet(bool junk)
- {
- }
-
-
-
-
-
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public ResourceSet(string fileName)
- {
- Reader = new ResourceReader(fileName);
- Table = new Hashtable();
- ReadResources();
- }
-
-
-
-
-
-
- [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
- public ResourceSet(Stream stream)
- {
- Reader = new ResourceReader(stream);
- Table = new Hashtable();
- ReadResources();
- }
-
-
- public ResourceSet(IResourceReader reader)
- {
- if (reader == null)
- throw new ArgumentNullException("reader");
- Reader = reader;
- Table = new Hashtable();
- ReadResources();
- }
-
-
-
-
-
-
- public virtual void Close()
- {
- Dispose(true);
- }
-
- protected virtual void Dispose(bool disposing)
- {
- if (disposing) {
-
- IResourceReader copyOfReader = Reader;
- Reader = null;
- if (copyOfReader != null)
- copyOfReader.Close();
- }
- Reader = null;
- _caseInsensitiveTable = null;
- Table = null;
- }
-
- public void Dispose()
- {
- Dispose(true);
- }
-
-
-
-
-
- public virtual Type GetDefaultReader()
- {
- return typeof(ResourceReader);
- }
-
-
-
-
- public virtual Type GetDefaultWriter()
- {
- return typeof(ResourceWriter);
- }
-
- [ComVisible(false)]
- public virtual IDictionaryEnumerator GetEnumerator()
- {
- return GetEnumeratorHelper();
- }
-
- /// <internalonly/>
- IEnumerator IEnumerable.GetEnumerator()
- {
- return GetEnumeratorHelper();
- }
-
- private IDictionaryEnumerator GetEnumeratorHelper()
- {
- Hashtable copyOfTable = Table;
-
- if (copyOfTable == null)
- throw new ObjectDisposedException(null, Environment.GetResourceString("ObjectDisposed_ResourceSet"));
- return copyOfTable.GetEnumerator();
- }
-
-
-
- public virtual string GetString(string name)
- {
- Hashtable copyOfTable = Table;
-
- if (copyOfTable == null)
- throw new ObjectDisposedException(null, Environment.GetResourceString("ObjectDisposed_ResourceSet"));
- if (name == null)
- throw new ArgumentNullException("name");
-
- try {
- return (string)copyOfTable[name];
- }
- catch (InvalidCastException) {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ResourceNotString_Name", name));
- }
- }
-
- public virtual string GetString(string name, bool ignoreCase)
- {
- Hashtable copyOfTable = Table;
-
- if (copyOfTable == null)
- throw new ObjectDisposedException(null, Environment.GetResourceString("ObjectDisposed_ResourceSet"));
- if (name == null)
- throw new ArgumentNullException("name");
-
- string s;
- try {
- s = (string)copyOfTable[name];
- }
- catch (InvalidCastException) {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ResourceNotString_Name", name));
- }
- if (s != null || !ignoreCase)
- return s;
-
-
- Hashtable caseTable = _caseInsensitiveTable;
-
- if (caseTable == null) {
- caseTable = new Hashtable(StringComparer.OrdinalIgnoreCase);
- #if _DEBUG
-
- 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;
- }
- try {
- return (string)caseTable[name];
- }
- catch (InvalidCastException) {
- throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_ResourceNotString_Name", name));
- }
- }
-
-
-
- public virtual object GetObject(string name)
- {
- Hashtable copyOfTable = Table;
-
- if (copyOfTable == null)
- throw new ObjectDisposedException(null, Environment.GetResourceString("ObjectDisposed_ResourceSet"));
- if (name == null)
- throw new ArgumentNullException("name");
-
- return copyOfTable[name];
- }
-
- public virtual object GetObject(string name, bool ignoreCase)
- {
- Hashtable copyOfTable = Table;
-
- 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;
-
-
- Hashtable caseTable = _caseInsensitiveTable;
-
- if (caseTable == null) {
- caseTable = new Hashtable(StringComparer.OrdinalIgnoreCase);
- #if _DEBUG
-
- 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];
- }
-
- protected virtual void ReadResources()
- {
- IDictionaryEnumerator en = Reader.GetEnumerator();
- while (en.MoveNext()) {
- object value = en.Value;
- Table.Add(en.Key, value);
- }
-
-
- }
- }
- }