Skip to content

String.Empty in Switch/case-Anweisung generiert einen Compiler-Fehler

Lösung:

Du kannst es stattdessen so versuchen:

switch(filter ?? String.Empty)

string.Empty ist ein schreibgeschütztes Feld, während "" ist eine Kompilierzeitkonstante. Sie können hier auch einen Artikel über Code Project String.Empty Internals lesen

//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.

public static readonly String Empty = ""; 

Als Randnotiz:

Dieses Problem wird auch auftreten, wenn Sie den Standardparameterwert in Ihrer Methode angeben (C# 4.0):

void myMethod(string filter = string.Empty){}

Das Obige führt zu einem Kompilierzeitfehler, da der Standardwert eine Konstante sein muss.

Der Grund ist: Sie können nicht verwenden readonly Werte für den Fall: Betrachten Sie das folgende Szenario:

public string MyProperty { get; } // is a read-only property of my class
switch (filter)
{
    case MyProperty:  // wont compile this since it is read only
    break;
          // rest of statements in Switch
}

Wie du gesagt hast string.Empty ist äquivalent zu "", hier kann ich dies mit dem gleichen Beispiel einer switch-Anweisung beweisen:

string filter = string.Empty;
switch (filter)
{
   case "":  // It's Okay.
   break;
    //rest of  statements in Switch
}

Dann ist der einzige Grund, warum es nicht erlaubt ist string.Empty Wenn es schreibgeschützt ist, lässt der Schalter in diesem Fall keine schreibgeschützten Werte zu.

Click to rate this post!
[Total: 0 Average: 0]



Anderer Beitrag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.