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 :

Qu'est-ce que ITypeDescriptorContext dans la méthode ConvertFrom ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut Qu'est-ce que ITypeDescriptorContext dans la méthode ConvertFrom ?
    Bonjour,

    J'utilise cette méthode pour convertir des valeurs lues depuis un fichier Excel vers des attributes c#.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    internal static T GetValue<T>(this string s) {
          TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));
     
          if (converter == null)
                throw new Exception("converter for type '" + typeof(T).FullName + "' not found");
     
          if (string.Equals("null", s) || string.Equals("NULL", s) || string.IsNullOrEmpty(s) || string.IsNullOrWhiteSpace(s))
                return default(T);
     
          if ((typeof(T) == typeof(double?)) || (typeof(T) == typeof(double)))
                s = s.Replace('.', ',');
          else if (typeof(T) == typeof(bool?))
                s = ((s == "no" || s == "No" || s == "NO") ? "false" : ((s == "yes" || s == "Yes" || s == "YES") ? "true" : "null"));
          else if (typeof(T) == typeof(bool))
                s = ((s == "yes" || s == "Yes" || s == "YES") ? "true" : "false");
     
          return (T)converter.ConvertFrom(s);
    }
    Mon problème est avec les double. En effet, ça ne prend pas en compte la culture, donc ça ne marchera pas sur toutes les configurations de PC. Je vois qu'il y a un override de ConvertFrom qui prend culture comme 3ème argument (où je devrais mettre CultureInfo.InvariantCulture et changer "s = s.Replace('.', ',');" par "s = s.Replace(',', '.');"), mais alors j'ai besoin de saisir ce 1er argument ITypeDescriptorContext, mais je n'ai aucune idée de ce que je devrais mettre là. Est-ce que quelqu'un peut m'aider là-dessus s'il vous plaît ?
    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 20
    Par défaut
    Bonjour,

    Il semble que ce paramètre n'est pas utilisé dans la fonction ConvertFrom (cf https://zqliu.wordpress.com/2013/03/...riptorcontext/).
    Donc tu peux mettre ce paramètre à null.

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Quand je vois le source de ConvertFrom d'après ton lien, la culture n'est pas non plus utilisée?? Si c'est le cas, comment je peux m'assurer de bien avoir le bon format de double dans ma string s ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 20
    Par défaut
    Tu as raison je n'ai même pas fait attention à cela.
    Ce lien http://stackoverflow.com/questions/2...-typeconverter t'explique comment créer un context.

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Ok merci.
    Et quid du fait que dans le code source de ConvertFrom (cf. https://zqliu.wordpress.com/2013/03/...riptorcontext/), le paramètre culture ne soit pas pris en compte?

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Toujours personne ne sait comment le paramètre culture est utilisé car dans le corps de la méthode, il n'est pas pris en compte, et pourtant la méthode fonctionne bien... ça prend bien en compte CultureInfo.InvariantCulture si je lui passe en paramètre.
    Merci de votre éclairage.

Discussions similaires

  1. [onPause] Que faire dans cette méthode ?
    Par NameX dans le forum Android
    Réponses: 9
    Dernier message: 01/04/2011, 10h06
  2. Réponses: 2
    Dernier message: 06/04/2006, 17h44
  3. Qu'est-ce que "sweep" dans IbConsole ???
    Par exclusif dans le forum Outils
    Réponses: 2
    Dernier message: 09/02/2006, 14h25
  4. est ce que un champs existe dans la base?
    Par cha_cha dans le forum Langage SQL
    Réponses: 9
    Dernier message: 03/10/2005, 11h25
  5. Réponses: 4
    Dernier message: 12/03/2005, 16h43

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