Search code examples
.netstringreadonlyconstants

Why isn't String.Empty a constant?


In .NET why is String.Empty read only instead of a constant? I'm just wondering if anyone knows what the reasoning was behind that decision.


Solution

  • The reason that static readonly is used instead of const is due to use with unmanaged code, as indicated by Microsoft here in the Shared Source Common Language Infrastructure 2.0 Release. The file to look at is sscli20\clr\src\bcl\system\string.cs.

    The Empty constant holds the empty string value. We need to call the String constructor so that the compiler doesn't mark this as a literal.

    Marking this as a literal would mean that it doesn't show up as a field which we can access from native.

    I found this information from this handy article at CodeProject.