In C#, string
and String
are functionally identical but differ in their usage conventions and syntactic roles. Here’s a detailed breakdown:
1. Technical Equivalence
string
is a C# keyword and an alias forSystem.String
, a class in the .NET Framework.String
is the full name of the .NET class (System.String
).
They refer to the exsame type and are interchangeable in most contexts. The compiler treats them identically.
2. Key Differences
Aspect | string (Keyword) | String (Class Name) |
---|---|---|
Syntax Role | C# language keyword (like int , bool ). | Full class name from the System namespace. |
Usage Convention | Preferred for variable declarations. | Used for static method calls (e.g., String.IsNullOrEmpty() ). |
Namespace | Does not require using System; . | Requires using System; (or System.String ). |
3. When to Use Which
Use string
For:
- Variable declarations and parameters.
- General string operations (e.g., concatenation, interpolation).
string name = "Alice"; // ✅ Preferred
string message = $"Hello, {name}!";
Use String
For:
- Calling static methods of the
String
class. - Emphasizing type semantics (e.g., reflection, generics).
if (String.IsNullOrEmpty(name)) // ✅ Preferred for static methods
{
Console.WriteLine("Name is empty.");
}
// Type checking
Type type = typeof(String); // Same as typeof(string)
4. Examples of Interchangeability
Variable Declaration (Both Work)
string s1 = "Hello"; // ✅ Conventional
String s2 = "World"; // ⚠️ Valid but less common
Static Methods (Both Work)
bool isEmpty1 = string.IsNullOrEmpty(s1); // ✅ Works but unconventional
bool isEmpty2 = String.IsNullOrEmpty(s2); // ✅ Preferred
Type Comparison
Console.WriteLine(s1.GetType() == typeof(string)); // True
Console.WriteLine(s2.GetType() == typeof(String)); // True
5. Edge Cases
- Namespace Conflicts: If you define a custom
String
class,String
refers to your class, whilestring
/System.String
refers to the .NET type.
using System;
namespace MyApp
{
class String { } // ❗ Avoid this!
class Program
{
static void Main()
{
String s = new String(); // Refers to MyApp.String
System.String s2 = "Hello"; // Explicit .NET String
string s3 = "World"; // Refers to System.String
}
}
}
- No
using System;
Directive:
// Without "using System;":
string s1 = "Works"; // ✅ No namespace needed
System.String s2 = "Works"; // ✅ Fully qualified
String s3 = "Fails"; // ❌ Compiler error (unless in scope)
6. Best Practices
- Use
string
for variables, parameters, and local declarations. - Use
String
when invoking static methods (e.g.,String.Format()
,String.Compare()
). - Maintain consistency with your team’s coding standards.
Summary
string
is idiomatic in C# and aligns with primitive-type keywords.String
explicitly references the .NET class and is used for static methods.- Both are technically identical—choose based on convention and readability!