2017-09-02 2 views
-1

ich den folgenden Code geschrieben haben:Kann in C# der Wert mit dem Schlüsselwort AS extrahiert werden? Wie?

in Zeile 3 Zeitfehler kompilieren
 object obj = 123; // Line 1 
     int? num = null; // Line 2 
     num = obj as int; // Line 3 

Ich erhalte als - „das als Schlüsselwort mit Referenztyp oder Nullable Type verwendet werden muss (‚int‘ist ein NULL-Wert Art)".

ich verstehen will:
1. Obwohl meine int NULL sein kann, warum ist es dann diesen Fehler
2. geben Wie können wir den Wert von obj in num bekommen? Funktioniert das nicht als Keyword hier?

Antwort

4

Int? Und int sind zwei verschiedene Arten.

ändern

num = obj as int; // Line 

Um

num = obj as int?; 

zur besseren Lesbarkeit, können Sie sogar schreiben:

Nullable<int> num; 
num = obj as Nullable<int>; 

Ich werde diese ein wenig mehr erweitern und sagen, wie zu tun Sie erhalten den Wert von einem Nullable-Objekt. Nun, hier ist ein Weg.

object obj = 123; 
int? num; 
num = obj as int?; 
int myNumericValue = default(int); 
If (num.HasValue) myNumericValue = num.Value; 
1

Damit dies funktioniert ....

num = obj as int; // Line 3 

... die as Betreiber muss in der Lage sein, zurück null wenn obj nicht auf int gegossen werden. Aber int kann keine Null speichern, so dass es zu einem Fehler kommt.

Sie haben zwei Alternativen:

1. Verwenden Sie NULL festlegbare int

int? num; 
num = obj as int?; 

2. Verwenden Sie ein wenig mehr Code

int num; 
num = (obj is int) ? (int)obj : default(int); 
Verwandte Themen