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:
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