Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2909 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] comment tester si une variable est initialisée ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C#] comment tester si une variable est initialisée ?

n°1531597
nemohp
Adepte du provisoire permanent
Posté le 21-03-2007 à 14:22:10  profilanswer
 

Bonjour,
 
je cherche la commande qui permet de tester qu'une variable est bien initialisée
 
par exemple une classe Compte :
 

Code :
  1. public class Compte{
  2.  
  3.   // date d'activation du compte
  4.   private DateTime _dateActivation;
  5.   public DateTime dateActivation{
  6.     get{ return _dateActivation; }
  7.     // pas de set public
  8.   }
  9.   // numero du compte
  10.   private int _numeroDeCompte;
  11.   public int _numeroDeCompte{
  12.     get{ return _numeroDeCompte; }
  13.     // pas de set public
  14.   }
  15.   // constructeur : un compte non-activé par défaut
  16.   public Compte(int numeroDeCompte){
  17.     this._numeroDeCompte = numeroDeCompte;
  18.   }
  19.   // activer un compte
  20.   public void activer(){
  21.     // tester si le compte n'est pas déja activé
  22.     if( estActive() )
  23.       throw new Exception("Le compte "+_numeroDeCompte +" a déja été activé le "+_dateActivation);
  24.     // enregistrer la date d'activation
  25.     _dateActivation = DateTime.now;
  26.   }
  27.   // tester si le compte est activé
  28.   public bool estActive(){
  29.    return _dateActivation == null;  // <=================    ce test ne compile pas =========================
  30.   }
  31. } // Fin class Test


 
Quel test test ou fonction faut-il utiliser dans la methode estActive() pour controler que l'attribut _dateActivation  n'a pas été déclarée ?


Message édité par nemohp le 21-03-2007 à 14:23:14
mood
Publicité
Posté le 21-03-2007 à 14:22:10  profilanswer
 

n°1531637
nemohp
Adepte du provisoire permanent
Posté le 21-03-2007 à 15:07:04  profilanswer
 

utiliser _dateActivation.Equals(null) semble être accepté

n°1531658
pikti
I’ve done worse
Posté le 21-03-2007 à 15:26:14  profilanswer
 

Les DateTime sont des types valeur, c'est non nullable en 1.1.
 
Par défaut ça vaut DateTime.MinValue, tu peux donc tester si différent de cette valeur.

n°1531668
nemohp
Adepte du provisoire permanent
Posté le 21-03-2007 à 15:38:07  profilanswer
 

arf... ça craint dotnet parfois ...

n°1532914
_Mose_
Lonesome coder
Posté le 23-03-2007 à 16:29:09  profilanswer
 

nemohp a écrit :

arf... ça craint dotnet parfois ...

La vieille remarque complètement gratos.
Surtout venant d'un mec qui ne sais pas coder correctement.
 
La solution à ton pb n'est pas lié au langage, mais à ta façon de coder.
Pour savoir si c'est initialisé, il suffit de mettre une valeur par défaut non utilisée (ex : DateTime.MinValue), et de vérifier au moment où tu le veux que cette valeur a changé.
L'avantage c'est que ça marche pour tout (types référence ou valeur), et que si jamais dans les version ultérieur du framework, la valeur par défaut change, tu es assuré de la compatibilité ascendante.
 
Note : ca marche aussi en Java, C++, C, et j'en passe.

n°1532934
nemohp
Adepte du provisoire permanent
Posté le 23-03-2007 à 17:06:07  profilanswer
 

je vois pas en quoi c'est mal codé... et ta remarque est également "gratos"
 
Ta technique, même si elle marche, n'est pas plus logique que mon idée. Instancier cette date mini, c'est du bricolage.
 
De nombreux languages permettent de tester si un object déclaré a bien été instancié.
D'ailleurs en C#2, ça a été implanté avec les nullables. Donc ma question est loin d'être celle d'un mauvais codeur...

Message cité 1 fois
Message édité par nemohp le 23-03-2007 à 17:06:46
n°1532960
_Mose_
Lonesome coder
Posté le 23-03-2007 à 18:27:03  profilanswer
 

nemohp a écrit :

De nombreux languages permettent de tester si un object déclaré a bien été instancié.


Tu fais la différence entre un type valeur et un type référence ?
Ca veut dire quoi "instancier" un type valeur, stp ?
 
Plutôt que de cracher dans la soupe gratuitement, tu ferais mieux de garder ton énergie pour apprendre, ça te permettra de faire des critiques constructives.

n°1697820
sambet
Posté le 05-03-2008 à 18:27:33  profilanswer
 

Salut (au cas ou tu serais de passage et que tu verrais ma réponse),
 
Je trouve intérescente ta solution, mais comme la valeur min d'une DateTime est 01/01/01 00:00 ... Il n'est pas impossible qu'une telle date soit présente, non ? Voila par curiosité.  
 
Est ce que tu es sure de ne jamais avoir à faire à cette date ?

n°1697928
Ace17
Posté le 06-03-2008 à 08:23:12  profilanswer
 

Je rejoins _Mose_. D'apres moi, la logique de ton programme ne devrait pas reposer sur le fait que les variables possedent l'etat "non initialise".
 

n°1721319
gargamel67
Posté le 21-04-2008 à 20:49:44  profilanswer
 

Dans .NET 2.0, il y a une classe Nullable qui permet de gérer ce genre de problème.
Il suffit simplement d'écrire un truc du genre:
 
Nullable<DateTime> myDate;
 
if (myDate == null)
{
  /* non initialisé */
}
else
{
  Console.WriteLine(myDate.Value);
}


---------------
Distributeurs automatiques à proximité | Jupiteo - Création et optimisation d'application web

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] comment tester si une variable est initialisée ?

 

Sujets relatifs
variable de sessionvariable couleur
novice !!! extraction de la BDD dans une variableProblème pour tester reload
variableTester le format d'une chaine & expressions régulieres
[C++] Afficher une variable sur un graph[JS] Exécuter une fonction à partir de son nom en variable chaîne
operation mathématique sur une variable (script pop up)Résultat code PHP dans une variable --> include ?
Plus de sujets relatifs à : [C#] comment tester si une variable est initialisée ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR