Ich habe eine Aufzählung
string name;
public enum Color
{
Red,
Green,
Yellow
}
So setzen Sie es beim Laden auf NULL.
name = "";
Color color = null; //error
Bearbeitet: Mein schlechtes, ich habe es nicht richtig erklärt. Aber alle Antworten in Bezug auf nullable sind perfekt. Meine Situation ist Was wäre, wenn ich für die Aufzählung in einer Klasse mit anderen Elementen wie Name usw. get / set habe. Beim Laden der Seite initiiere ich die Klasse und versuche, die Werte standardmäßig auf null zu setzen. Hier ist das Szenario (Code ist in C #):
namespace Testing
{
public enum ValidColors
{
Red,
Green,
Yellow
}
public class EnumTest
{
private string name;
private ValidColors myColor;
public string Name
{
get { return name; }
set { name = value; }
}
public ValidColors MyColor
{
get { return myColor; }
set { myColor = value; }
}
}
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
EnumTest oEnumTest = new EnumTest();
oEnumTest.Name = "";
oEnumTest.MyColor = null; //???
}
}
}
Dann habe ich anhand der folgenden Vorschläge den obigen Code geändert, damit er mit den Methoden get und set funktioniert. Ich muss nur "?" in der EnumTest-Klasse während der Deklaration der privaten Enum-Variablen und in der get / set-Methode:
public class EnumTest
{
private string name;
private ValidColors? myColor; //added "?" here in declaration and in get/set method
public string Name
{
get { return name; }
set { name = value; }
}
public ValidColors? MyColor
{
get { return myColor; }
set { myColor = value; }
}
}
Vielen Dank für die schönen Vorschläge.
Antworten:
Sie können entweder das "?" Operator für einen nullbaren Typ.
Oder verwenden Sie die Standardpraxis für Aufzählungen, die nicht null sein können, indem der ERSTE Wert in der Aufzählung (auch bekannt als 0) der Standardwert ist. Zum Beispiel in einem Fall von Farbe Keine.
quelle
Wenn dies C # ist, funktioniert es nicht: Aufzählungen sind Werttypen und können es nicht sein
null
.Die normalen Optionen sind das Hinzufügen eines
None
Mitglieds:... oder zu verwenden
Nullable
:quelle
Machen Sie Ihre Variable nullbar. Mögen:
oder
quelle
Eine Aufzählung ist ein "Wert" -Typ in C # (bedeutet, dass die Aufzählung als beliebiger Wert gespeichert wird, nicht als Referenz auf eine Stelle im Speicher, an der der Wert selbst gespeichert ist). Sie können Werttypen nicht auf null setzen (da null nur für Referenztypen verwendet wird).
Davon abgesehen können Sie die integrierte
Nullable<T>
Klasse verwenden, die Werttypen so umschließt, dass Sie sie auf null setzen, prüfen, ob sie vorhanden sind,HasValue
und die tatsächliche Klasse abrufenValue
. (Dies sind beide Methoden für dieNullable<T>
Objekte.Es gibt auch eine Verknüpfung, die Sie verwenden können:
Das ist das gleiche wie
Nullable<Color>
;quelle
Ich gehe hier von c ++ aus. Wenn Sie c # verwenden, ist die Antwort wahrscheinlich dieselbe, aber die Syntax ist etwas anders. Die Aufzählung besteht aus einer Reihe von int-Werten. Es ist kein Objekt, daher sollten Sie es nicht auf null setzen. Wenn Sie etwas auf Null setzen, zeigen Sie mit einem Zeiger auf ein Objekt, um Null zu adressieren. Mit einem Int kann man das nicht wirklich machen. Was Sie mit einem int tun möchten, ist, es auf einen Wert zu setzen, bei dem Sie es normalerweise nicht haben würden, damit Sie tel können, ob es ein guter Wert ist oder nicht. Stellen Sie also Ihre Farbe auf -1 ein
Oder Sie können Ihre Aufzählung bei 1 beginnen und auf Null setzen. Wenn Sie die Farbe so wie sie ist auf Null setzen, setzen Sie sie auf "Rot", da Rot in Ihrer Aufzählung Null ist.
So,
quelle
Da der Standardwert
enum
gleich 0 ist, wirddefault(Color)
er gedruckt , wenn Sie ihn aufrufen würdenNone
.Da es sich an der ersten Position befindet, würde das Zuweisen des Literalwerts 0 zu einer anderen Konstante dieses Verhalten ändern, und auch das Ändern der Reihenfolge des Auftretens würde die Ausgabe von
default(Color)
( https://stackoverflow.com/a/4967673/8611327 ) ändern.quelle
oder du kannst verwenden
Beispiel, in dem das Zuweisen von Null nicht funktioniert
so können Sie verwenden:
quelle