<p>Why does C#.Net allow the declaration of the string object to be case-insensitive?</p>

<pre><code>String sHello = "Hello";
string sHello = "Hello";
</code></pre>

<p>Both the lower-case and upper-case S of the word String are acceptable and this seems to be the only object that allows this.</p>

<p>Can anyone explain why?</p>

[{'answer_id': 9739, 'author': 'lubos hasko', 'author_id': 275, 'author_profile': 'https://Stackoverflow.com/users/275', 'pm_score': 2, 'selected': False, 'text': '<p>"String" is the name of the class. "string" is keyword that maps this class.</p>\n\n<p>it\'s the same like</p>\n\n<ul>\n<li>Int32 => int</li>\n<li>Decimal => decimal</li>\n<li>Int64 => long</li>\n</ul>\n\n<p>... and so on...</p>\n'}, {'answer_id': 9742, 'author': 'ZombieSheep', 'author_id': 377, 'author_profile': 'https://Stackoverflow.com/users/377', 'pm_score': 0, 'selected': False, 'text': '<p>string is an alias for System.String.  They are the same thing.</p>\n\n<p>By convention, though, objects of type (System.String) are generally refered to as the alias - e.g.</p>\n\n<pre><code>string myString = "Hello";\n</code></pre>\n\n<p>whereas operations on the class use the uppercase version\ne.g.</p>\n\n<pre><code>String.IsNullOrEmpty(myStringVariable);\n</code></pre>\n'}, {'answer_id': 9746, 'author': 'aku', 'author_id': 1196, 'author_profile': 'https://Stackoverflow.com/users/1196', 'pm_score': 1, 'selected': False, 'text': '<p>"string" is a C# keyword. it\'s just an alias for "System.String" - one of the .NET BCL classes. </p>\n'}, {'answer_id': 9747, 'author': 'Keith', 'author_id': 905, 'author_profile': 'https://Stackoverflow.com/users/905', 'pm_score': 5, 'selected': True, 'text': '<p><strong><code>string</code></strong> is a language keyword while <code>System.String</code> is the type it aliases.</p>\n\n<p>Both compile to exactly the same thing, similarly:</p>\n\n<ul>\n<li><strong><code>int</code></strong> is <code>System.Int32</code></li>\n<li><strong><code>long</code></strong> is <code>System.Int64</code></li>\n<li><strong><code>float</code></strong> is <code>System.Single</code></li>\n<li><strong><code>double</code></strong> is <code>System.Double</code></li>\n<li><strong><code>char</code></strong> is <code>System.Char</code></li>\n<li><strong><code>byte</code></strong> is <code>System.Byte</code></li>\n<li><strong><code>short</code></strong> is <code>System.Int16</code></li>\n<li><strong><code>ushort</code></strong> is <code>System.UInt16</code></li>\n<li><strong><code>uint</code></strong> is <code>System.UInt32</code></li>\n<li><strong><code>ulong</code></strong> is <code>System.UInt64</code></li>\n</ul>\n\n<p>I think in most cases this is about code legibility - all the basic system value types have aliases, I think the lower case <code>string</code> might just be for consistency.</p>\n'}, {'answer_id': 9748, 'author': 'Patrik Svensson', 'author_id': 936, 'author_profile': 'https://Stackoverflow.com/users/936', 'pm_score': 1, 'selected': False, 'text': '<p>"string" is just an C# alias for the class "String" in the System-namespace.</p>\n'}, {'answer_id': 9754, 'author': 'Iain Holder', 'author_id': 1122, 'author_profile': 'https://Stackoverflow.com/users/1122', 'pm_score': 3, 'selected': False, 'text': "<p>Further to the other answers, it's good practice to use keywords if they exist.  </p>\n\n<p>E.g. you should use <strong>string</strong> rather than <strong>System.String</strong>.</p>\n"}, {'answer_id': 10226, 'author': 'Brian Leahy', 'author_id': 580, 'author_profile': 'https://Stackoverflow.com/users/580', 'pm_score': 0, 'selected': False, 'text': '<p>I use String and not string,\nInt32 instead of int, \nso that my syntax highlighting picks up on a string as a Type and not a keyword. I want keywords to jump out at me.</p>\n'}]
['https://Stackoverflow.com/questions/9734', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/383/']