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
stringis a C# keyword and an alias forSystem.String, a class in the .NET Framework.Stringis 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
Stringclass. - 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
Stringclass,Stringrefers to your class, whilestring/System.Stringrefers 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
stringfor variables, parameters, and local declarations. - Use
Stringwhen invoking static methods (e.g.,String.Format(),String.Compare()). - Maintain consistency with your team’s coding standards.
Summary
stringis idiomatic in C# and aligns with primitive-type keywords.Stringexplicitly references the .NET class and is used for static methods.- Both are technically identical—choose based on convention and readability!