Warum erhalte ich den Fehler "Der Typ 'string' muss ein nicht nullbarer Werttyp sein, um ihn als Parameter 'T' im generischen Typ oder in der generischen Methode 'System.Nullable' zu verwenden"?
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using Universe;
namespace Universe
{
public class clsdictionary
{
private string? m_Word = "";
private string? m_Meaning = "";
string? Word {
get { return m_Word; }
set { m_Word = value; }
}
string? Meaning {
get { return m_Meaning; }
set { m_Meaning = value; }
}
}
}
String
ist bereits nullbar.Antworten:
Verwenden Sie
string
stattstring?
an allen Stellen in Ihrem Code.Der
Nullable<T>
Typ erfordert, dass T ein nicht nullbarer Werttyp ist, zum Beispielint
oderDateTime
. Referenztypen wiestring
können bereits null sein. Es hätte keinen Sinn, solche Dinge zuzulassen,Nullable<string>
so dass es nicht erlaubt ist.Auch wenn Sie C # 3.0 oder höher verwenden, können Sie Ihren Code mithilfe automatisch implementierter Eigenschaften vereinfachen :
quelle
string
ist ein Referenztyp, eine Klasse. Sie können nur verwendenNullable<T>
oder derT?
C # syntaktische Zucker mit Nicht-Nullable - Wert - Typen wieint
undGuid
.Insbesondere kann
string
ein Ausdruck vom Typ wie ein Referenztypstring
bereits null sein:quelle
System.String
(mit Großbuchstaben S) ist bereits nullbar, Sie müssen es nicht als solches deklarieren.(string? myStr)
ist falsch.quelle
Aus einem ganz bestimmten Grund
Nullable<int>
Geben Sie den Cursor auf Nullable und drücken Sie F12 - Die Metadaten geben den Grund an (beachten Sie die Strukturbeschränkung):http://msdn.microsoft.com/en-us/library/d5x73970.aspx
quelle
Nullable<Nullable<int>>
nicht zulässig ist, obwohlNullable<int>
es sich um eine Struktur handelt.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:Jedoch,
Das Wichtigste hier ist, die Absicht Ihres Codes zu zeigen. Wenn die "Absicht" ist, dass der Referenztyp null sein kann, markieren Sie ihn, andernfalls würde die Zuweisung eines Nullwerts zu einem nicht nullfähigen Wert zu einer Compilerwarnung führen.
Mehr Info
quelle