IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Equivalent d'un pointeur de float sans passer par unsafe


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 121
    Par défaut Equivalent d'un pointeur de float sans passer par unsafe
    Bonjour à tous et a toute,

    Après un certain nombres de recherches plus ou moins infructueuses,
    Je me vois contraint de poster pour demander de l'aide à la communauté de développeurs C#

    Alors voila :

    J'ai le besoin suivant, je souhaite stocker une variable dans un Dictionary ou un Hashtable.
    Seulement, j'aurai aimé que la valeur de ce que je met dans le container évolue en même temps que la variable, et ce pour éviter d'avoir a remettre a jour le Hashtable à chaque modification de valeur...

    Alors pour répondre au besoin, j'ai bien trouvé le moyen d'utiliser les pointeur à l'ancienne en passant par du code unsafe.
    Mais j'aurai aimé savoir si quelqu'un aurait dans ses grimoires, une formule magique permettant d'utiliser les pointeurs de variables possédant un type primitif sans passer par la case unsafe ? Même si je sens bien que la demande tient plus de l'incantation mystique qu'autre chose !!


    Merci d'avance

    Cordialement

  2. #2
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut,
    Je ne suis pas sur que ce soit une bonne idée, mais bon, passons.
    Je n'ai pas tenté mais il est peut être possible que cette syntaxe fonctionne (même si je n'y crois pas) : Dictionary<T, ref float>.
    Mais j'y crois vraiment pas du tout ^^'.

    Sinon la solution est d'encapsuler ton type pour qu'il devienne un type de référence plutot qu'un type de valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class FloatRef
    {
        public float Value { get; set; }
    }
     
    Dictionary<int, FloatRef> dic = new Dictionary<int, FloatRef>();
    FloatRef fr;
    fr.Value = 12.7f;
    dic.Add(0, fr);
    fr.Value = 71.64f;
    Normalement dic[0].Value devrait être égale à 71.64f.

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par ctxnop Voir le message
    Sinon la solution est d'encapsuler ton type pour qu'il devienne un type de référence plutot qu'un type de valeur :
    EDIT : REPONSE ARCHI FAUSSE - EDITEE

  4. #4
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Ah oui, pas bête, j'avais complètement zapé cette solution
    Enfin bon, a priori on est au moins deux à trouver le besoin assez louche

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    A mon avis le concept et bancal !

    Si je me base sur l'assertion suivante

    et ce pour éviter d'avoir a remettre a jour le Hashtable à chaque modification de valeur...
    Cela signifie que Lharuun considere qu'il y a une fonction liant la HashKey a la valeur float et qu'i espere qu'en utilisant une reference il ne doive pas recalculer le Hash si la valeur change !

    C'est evidement tout a fait faux !

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Oui, mais pour cela utiliser '?' suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public float? Value;
    Dictionary<int, float?> dic = new Dictionary<int, float?>();
    Cela revient à utiliser dans ce cas Nullable<float> en lieu et place de float. (le '?' est juste un raccourci syntaxique).
    Mais je m'interroge sur le pourquoi de la chose ici, qui fait penser à une erreur de conception.
    Gni ? Les nullables sont des structs, aux dernières nouvelles C'est pas comme ça qu'on pourrait avoir une sémantique valeur sur ces float.

    Lharuun: pourquoi tes valeurs changent-elles APRES que tu les aies mises dans le dico ?

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Gni ? Les nullables sont des structs,



    Oui, c'est vrai. C'est "dissimulé" par la surcharge des opérateurs explicit et implicit qui fait qu'on peut leur affecter une valeur "null", ce qui m'a fait dire une grosse connerie .......

    J'ai honte

Discussions similaires

  1. Imprimer un TIFF sans passer par PostScript
    Par iubito dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 22/03/2004, 20h44
  2. Réponses: 10
    Dernier message: 24/02/2004, 12h28
  3. Réponses: 4
    Dernier message: 05/02/2004, 18h18
  4. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13
  5. [Kylix] Débrider Kylix sans passer par le Net
    Par BXDSPORT dans le forum EDI
    Réponses: 1
    Dernier message: 23/03/2003, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo