Je travaille sur une méthode qui acceptera un StreamWriter, soit une chaîne ou une valeur Nullable, et une longueur, et écrira la valeur à StreamWriter, rembourré à la longueur. Si la valeur est null, je veux écrire des espaces. Je veux faire quelque chose comme l'exemple simplifié suivant, qui est juste à des fins de démonstration.Puis-je créer une fonction générique qui accepte un Nullable <something>?
public void FixedWrite(StreamWriter writer, string value,
int length) {
if (value == null) value = "";
value = value.PadRight(length);
writer.Write(value);
}
public void FixedWrite<T>(StreamWriter writer, T value,
int length) where T : Nullable /* won't work of course */ {
string strVal;
if (!value.HasValue) strVal = null;
else strVal = value.Value.ToString();
FixedWrite(writer, strVal, length);
}
je pouvais avoir pour tous les surcharges différents types sous-jacents (ils sont toutes les dates, ints, bools et décimaux), mais je voulais voir si je pouvais obtenir la version générique de travail. Existe-t-il un moyen de faire en sorte que T soit toujours un type Nullable <> et d'accéder aux propriétés Nullable <> (HasValue et Value)? Ou devrais-je simplement m'en tenir aux surcharges spécifiques au type sous-jacent?
This question pose un problème similaire, mais dans mon cas, les valeurs sont déjà nulles et je veux juste écrire la valeur si elle en a un et les espaces si ce n'est pas le cas.
Bien sûr. Je rendais cela plus difficile que nécessaire. Merci. –
Cela fonctionne, mais vous * pouvez * passer un paramètre nullable à la méthode générique. –