2222using  System . Collections . ObjectModel ; 
2323using  System . IO ; 
2424
25+ #nullable enable
26+ 
2527namespace  OpenQA . Selenium . Firefox . Internal 
2628{ 
2729    /// <summary> 
2830    /// Parses and reads an INI file. 
2931    /// </summary> 
30-     internal  class  IniFileReader 
32+     internal  sealed   class  IniFileReader 
3133    { 
32-         private  Dictionary < string ,  Dictionary < string ,  string > >  iniFileStore  =  new  Dictionary < string ,  Dictionary < string ,  string > > ( ) ; 
34+         private  readonly   Dictionary < string ,  Dictionary < string ,  string > >  iniFileStore  =  new  Dictionary < string ,  Dictionary < string ,  string > > ( ) ; 
3335
3436        /// <summary> 
3537        /// Initializes a new instance of the <see cref="IniFileReader"/> class. 
3638        /// </summary> 
3739        /// <param name="fileName">The full path to the .INI file to be read.</param> 
40+         /// <exception cref="ArgumentNullException">If <paramref name="fileName"/> is <see langword="null"/> or <see cref="string.Empty"/>.</exception> 
41+         /// <exception cref="FileNotFoundException">If no file exists at file path <paramref name="fileName"/>.</exception> 
3842        public  IniFileReader ( string  fileName ) 
3943        { 
4044            if  ( string . IsNullOrEmpty ( fileName ) ) 
@@ -53,7 +57,7 @@ public IniFileReader(string fileName)
5357            string [ ]  iniFileContent  =  File . ReadAllLines ( fileName ) ; 
5458            foreach  ( string  iniFileLine  in  iniFileContent ) 
5559            { 
56-                 if  ( ! string . IsNullOrEmpty ( iniFileLine . Trim ( ) )  &&  ! iniFileLine . StartsWith ( ";" ,  StringComparison . OrdinalIgnoreCase ) ) 
60+                 if  ( ! string . IsNullOrWhiteSpace ( iniFileLine )  &&  ! iniFileLine . StartsWith ( ";" ,  StringComparison . OrdinalIgnoreCase ) ) 
5761                { 
5862                    if  ( iniFileLine . StartsWith ( "[" ,  StringComparison . OrdinalIgnoreCase )  &&  iniFileLine . EndsWith ( "]" ,  StringComparison . OrdinalIgnoreCase ) ) 
5963                    { 
@@ -86,21 +90,24 @@ public IniFileReader(string fileName)
8690        /// <summary> 
8791        /// Gets a <see cref="ReadOnlyCollection{T}"/> containing the names of the sections in the .INI file. 
8892        /// </summary> 
89-         public  ReadOnlyCollection < string >  SectionNames 
90-         { 
91-             get 
92-             { 
93-                 List < string >  keyList  =  new  List < string > ( this . iniFileStore . Keys ) ; 
94-                 return  new  ReadOnlyCollection < string > ( keyList ) ; 
95-             } 
96-         } 
93+         public  ReadOnlyCollection < string >  SectionNames  =>  new  ReadOnlyCollection < string > ( new  List < string > ( this . iniFileStore . Keys ) ) ; 
9794
9895        /// <summary> 
9996        /// Gets a value from the .INI file. 
10097        /// </summary> 
10198        /// <param name="sectionName">The section in which to find the key-value pair.</param> 
10299        /// <param name="valueName">The key of the key-value pair.</param> 
103100        /// <returns>The value associated with the given section and key.</returns> 
101+         /// <exception cref="ArgumentNullException"> 
102+         /// <para>If <paramref name="sectionName"/> is <see langword="null"/> or <see cref="string.Empty"/>.</para> 
103+         /// <para>-or-</para> 
104+         /// <para>If <paramref name="valueName"/> is <see langword="null"/> or <see cref="string.Empty"/>.</para> 
105+         /// </exception> 
106+         /// <exception cref="ArgumentException"> 
107+         /// <para>If no section named <paramref name="sectionName"/> exists.</para> 
108+         /// <para>-or-</para> 
109+         ///<para>If the section does not contain a value named <paramref name="valueName"/>.</para> 
110+         /// </exception> 
104111        public  string  GetValue ( string  sectionName ,  string  valueName ) 
105112        { 
106113            if  ( string . IsNullOrEmpty ( sectionName ) ) 
@@ -117,19 +124,17 @@ public string GetValue(string sectionName, string valueName)
117124
118125            string  lowerCaseValueName  =  valueName . ToUpperInvariant ( ) ; 
119126
120-             if  ( ! this . iniFileStore . ContainsKey ( lowerCaseSectionName ) ) 
127+             if  ( ! this . iniFileStore . TryGetValue ( lowerCaseSectionName ,   out   Dictionary < string ,   string > ?   section ) ) 
121128            { 
122129                throw  new  ArgumentException ( "Section does not exist: "  +  sectionName ,  nameof ( sectionName ) ) ; 
123130            } 
124131
125-             Dictionary < string ,  string >  section  =  this . iniFileStore [ lowerCaseSectionName ] ; 
126- 
127-             if  ( ! section . ContainsKey ( lowerCaseValueName ) ) 
132+             if  ( ! section . TryGetValue ( lowerCaseValueName ,  out  string ?  value ) ) 
128133            { 
129134                throw  new  ArgumentException ( "Value does not exist: "  +  valueName ,  nameof ( valueName ) ) ; 
130135            } 
131136
132-             return  section [ lowerCaseValueName ] ; 
137+             return  value ; 
133138        } 
134139    } 
135140} 
0 commit comments