The Labs \ Source Viewer \ SSCLI \ System.Collections.Specialized \ CaseSensitiveStringDictionary

  1. //------------------------------------------------------------------------------
  2. // <copyright file="CaseSensitiveStringDictionary.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. /*
  16. On UNIX systems the environment variable names are case sensitive (as the opposite from Windows).
  17. Thus using StringDictionary to store the environment settings is wrong
  18. (StringDictionary converts key values to lower case).
  19. CaseSensitiveStringDictionary is derived from the StringDictionary and it does the same thing,
  20. except the conversion of the key to lower case. So its fully usable for UNIX systems.
  21. This class is used to create the StringDictionary object everywhere
  22. its used for environment settings storage (only ProcessStartInfo.cs and Executor.cs).
  23. This change enables the correct UNIX behavior along with not changing public API.
  24. Author: vitkaras
  25. */
  26. #if PLATFORM_UNIX
  27. namespace System.Collections.Specialized
  28. {
  29.    
  30.    
  31.     using System.Runtime.InteropServices;
  32.    
  33.     using System.Diagnostics;
  34.    
  35.     using System;
  36.    
  37.     using System.Collections;
  38.    
  39.     using System.ComponentModel.Design.Serialization;
  40.    
  41.     using System.Globalization;
  42.    
  43.     using System.Security.Permissions;
  44.    
  45.    
  46.    
  47.     // This is copied from the StringDictionary
  48.    
  49.     // All of it except that the ToLower is removed for the keys -> this class maintains case
  50.    
  51.     internal class CaseSensitiveStringDictionary : StringDictionary
  52.     {
  53.        
  54.        
  55.         public CaseSensitiveStringDictionary()
  56.         {
  57.            
  58.         }
  59.        
  60.        
  61.        
  62.         public override string this[string key]
  63.         {
  64.            
  65.            
  66.            
  67.             get {
  68.                
  69.                
  70.                 if (key == null) {
  71.                    
  72.                     throw new ArgumentNullException("key");
  73.                    
  74.                 }
  75.                
  76.                
  77.                
  78.                 return (string)contents[key];
  79.                
  80.             }
  81.            
  82.            
  83.             set {
  84.                
  85.                
  86.                 if (key == null) {
  87.                    
  88.                     throw new ArgumentNullException("key");
  89.                    
  90.                 }
  91.                
  92.                
  93.                
  94.                 contents[key] = value;
  95.                
  96.             }
  97.         }
  98.        
  99.        
  100.        
  101.        
  102.        
  103.         public override void Add(string key, string value)
  104.         {
  105.            
  106.            
  107.             if (key == null) {
  108.                
  109.                 throw new ArgumentNullException("key");
  110.                
  111.             }
  112.            
  113.            
  114.            
  115.             contents.Add(key, value);
  116.            
  117.         }
  118.        
  119.        
  120.        
  121.        
  122.         public override bool ContainsKey(string key)
  123.         {
  124.            
  125.            
  126.             if (key == null) {
  127.                
  128.                 throw new ArgumentNullException("key");
  129.                
  130.             }
  131.            
  132.            
  133.            
  134.             return contents.ContainsKey(key);
  135.            
  136.         }
  137.        
  138.        
  139.        
  140.        
  141.         public override void Remove(string key)
  142.         {
  143.            
  144.            
  145.             if (key == null) {
  146.                
  147.                 throw new ArgumentNullException("key");
  148.                
  149.             }
  150.            
  151.            
  152.            
  153.             contents.Remove(key);
  154.            
  155.         }
  156.        
  157.     }
  158.    
  159. }
  160. #endif // PLATFORM_UNIX

Developer Fusion