[.NET][Résolu] Generic, String, et Nullable

Bonjour à tous !

Je développe en Asp.NET (C#) un formulaire contenant moults champs, chaque champs représentant un critère de recherche. Ces critères sont de différents types (chaîne, date, entier, flottant, …) et ne sont pas obligatoires.
J’envoie tous ces critères à mon objet Métier par le biais d’une grosse structure, cette structure contenant un attribut par critères. Ces attributs sont typés (string, int?, float?, DateTime?, …) en utilisant la classe Nullable pour les types valeurs. Je voudrais en effet que les critères non renseignés aient la valeur null.

Le problème se pose au moment de renseigner la structure…
Toutes les valeurs du formulaire sont de type string, je me suis donc dis que j’allais créer une méthode générique qui testerait la valeur d’un champ et renverait la valeur typée correspondante, ou null si le champs n’est pas renseigné.

Après plusieurs essais, j’en arrive à ça :

[code]// Pour les types valeurs
private static Nullable convertFieldValue(string value) where T : struct
{
T? retour = default(T);

 if (value != "")
 {
	 retour = (T?) Convert.ChangeType(value, retour.GetType());
 }
 else
 {
	 retour = null;
 }

 return retour;

}

// pour les types string
private static string convertFieldValue(string value)
{
string retour;

 if (value != "")
 {
	 retour = value;
 }
 else
 {
	 retour = null;
 }

 return retour;

}[/code]

Existe-t’il un moyen de combiner ces 2 méthodes ?
Ce n’est pas forcement nécessaire, mais je trouverais ça plus satisfaisant B)

Salut, je n’ai pas le temps de te répondre (je pars faire du sport ^^), j’essais de te donner une solution d’ici ce soir (c’est tout simple en fait).

public class GenericConverter
{
public static T FromString(string value)
{

        if (typeof(T) == typeof(string))
            return string.IsNullOrEmpty(value)? default(T) : (T)(object)value;
        else if (typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(Nullable<>))
        {
            if (string.IsNullOrEmpty(value))
                return default(T);
            else
                return (T)Convert.ChangeType(value, typeof(T).GetGenericArguments()[0]);
        }
        else throw new InvalidOperationException("T must be either string or Nullable<SomeThing>");
    }
}

Voilà voilà, j’ai pas testé, mais ca doit faire le boulot.
Le désavantage, c’est que tu perds à la fois en perf, et en “TypeSafety”.

Ah ben merci bien msieu, j’avais presque oublié ce message ! B)
Je vais étudier ta réponse (après une remise en forme B) ) mais d’après ce que tu me dis ça n’a pas l’air très interessant. La solution des 2 méthodes distinctes parait plus propre

Merci en tout cas !

EDIT :
Bon j’ai testé avec le code qui suit, ça fonctionne effectivement

[code]string strTest1 = FromString("");
string strTest2 = FromString(« value »);

int? test1 = FromString<int?>(« 10 »);
int? test2 = FromString<int?>("");[/code]

Merci ecore de m’avoir donné de ton temps, monsieur le spécialiste es girafe :smiley: