it-swarm.com.de

C # -nullable-String-Fehler

private string? typeOfContract
{
  get { return (string?)ViewState["typeOfContract"]; }
  set { ViewState["typeOfContract"] = value; }
}

Später im Code benutze ich es so:

typeOfContract = Request.QueryString["type"];

Bei der Deklaration der typeOfContract -Zeile erhalte ich den folgenden Fehler:

Der Typ 'string' muss ein nicht nullwertfähiger Wert sein, um ihn als Parameter 'T' im generischen Typ oder in der generischen Methode 'System.Nullable <T>' zu verwenden.

Irgendwelche Ideen? Grundsätzlich möchte ich sicherstellen, dass "type" ist in QueryString vorhanden, bevor eine Aktion ausgeführt wird.

136
Mike Fielden

System.String ist ein Referenztyp und bereits "nullable".

Nullable <T> und das? Suffix für Werttypen wie Int32, Double, DateTime usw.

304
Joe

Du machst es kompliziert. string ist bereits nullwertfähig. Sie müssen es nicht more nullable machen. Nimm das ? für den Eigenschaftstyp.

39
jop

string kann nicht der Parameter für Nullable sein, da string kein Werttyp ist. String ist ein Referenztyp.

string s = null; 

ist eine sehr gültige Anweisung und muss nicht auf null gesetzt werden.

private string typeOfContract
    {
      get { return ViewState["typeOfContract"] as string; }
      set { ViewState["typeOfContract"] = value; }
    }

sollte aufgrund des Schlüsselworts as funktionieren.

19
Szymon Rozga

String ist ein Referenztyp, daher müssen (und können) Sie hier nicht Nullable<T> Verwenden. Deklarieren Sie einfach typeOfContract als Zeichenfolge und suchen Sie nach Null, nachdem Sie diese aus der Abfragezeichenfolge abgerufen haben. Oder verwenden Sie String.IsNullOrEmpty, wenn Sie leere Zeichenfolgenwerte wie null behandeln möchten.

13
csgero

Verwenden Sie für nullable ? mit allen C # -Primitiven außer string.

Die folgende Seite enthält eine Liste der C # -Primitive : http://msdn.Microsoft.com/en-us/library/aa711900 (v = vs.71) .aspx

4
James Oravec

Bitte beachten Sie, dass in der kommenden Version von C #, die 8 ist, die Antworten nicht wahr sind.

All the reference types are non-nullable by default und Sie können tatsächlich Folgendes tun:

public string? MyNullableString; 
this.MyNullableString = null; //Valid

Jedoch,

public string MyNonNullableString; 
this.MyNonNullableString = null; //Not Valid and you'll receive compiler warning. 

Hier ist es wichtig, die Absicht Ihres Codes zu zeigen. Wenn die "Absicht" ist, dass der Referenztyp null sein kann, markieren Sie ihn ansonsten so Wenn Sie nicht nullable den Wert null zuweisen, wird der Compiler gewarnt.

Mehr Infos

Tun Sie es nicht dem Moderator, der alle Antworten löscht. Ich bin der festen Überzeugung, dass diese Antwort einen Mehrwert bietet und das Löschen jemanden davon abhält, zu wissen, was zur Zeit richtig ist. Da Sie alle Antworten gelöscht haben, poste ich die Antwort hier erneut. Der Link, der in Bezug auf "Duplikate" gesendet wurde, ist lediglich eine Eröffnung einiger Personen, und ich denke nicht, dass es sich um eine offizielle Empfehlung handelt.

0
ANewGuyInTown