2017-09-02 8 views
-1

J'ai écrit le code suivant:En C#, la valeur peut-elle être extraite en utilisant le mot clé AS? Comment?

 object obj = 123; // Line 1 
     int? num = null; // Line 2 
     num = obj as int; // Line 3 

Je reçois erreur de compilation de temps en ligne 3 comme - « le comme mot-clé doit être utilisé avec le type de référence ou type Nullable (« int » est une valeur non annulable type)".

Je veux comprendre:
1. Bien que mon int est annulable, pourquoi est-il alors donner cette erreur
2. Comment pouvons-nous obtenir la valeur de obj en num? Le mot clé AS ne fonctionnera-t-il pas ici?

Répondre

4

Int? Et int sont deux types différents.

changement

num = obj as int; // Line 

Pour

num = obj as int?; 

pour une meilleure lisibilité, vous pouvez même écrire:

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

Je vais étendre cela un peu plus et dire, comment vous obtenez la valeur d'un objet nullable. Eh bien, voici un moyen.

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

Pour que cela fonctionne ....

num = obj as int; // Line 3 

... l'opérateur as doit pouvoir retourner null si obj ne peut pas être jeté à int. Mais int ne peut pas stocker une valeur nulle, ce qui entraîne une erreur.

Vous avez deux alternatives:

1. Utilisez nullable int

int? num; 
num = obj as int?; 

2. Utilisez un peu plus de code

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