Fonte T paramètre dans la méthode générique de type DateTime

J'ai le texte suivant (simplifié) méthode:

private static string GetStringFromValue<T>(T val)
{
    if (typeof(T) == typeof(DateTime))
    {
        return string.Format("{0}", ((DateTime)val).Year.ToString("0000"));
    }
    return string.Empty;
}

À la fonte "(DateTime)val", j'obtiens l'erreur suivante:

Ne peut pas lancer expression de Type 'T' de type 'DateTime'

Que puis-je faire pour accéder à la propriété Année de la date de paramètre?

Mise à JOUR: Merci à vous pour toutes vos réponses rapides. Cette méthode (et le nom de la méthode) est vraiment (!) simplifié, afin de montrer exactement mon problème et de laisser tout le monde il suffit de copier&de le coller dans son propre visual studio. C'est juste que je voulais ajouter un peu de Type de valeurs spécifiques si le type est un type DateTime. A côté de cela, 99% de la méthode est la même.

  • Pourquoi écrivez-vous String,Format("{0}", something)?
  • Pas seulement cela. something.ToString().
  • L'année n'est pas la seule valeur que je veux obtenir. Mais j'ai simplifié la méthode. Ou est-ce mal que j'ai utiliser des chaînes de caractères.Format? Il a une bien meilleure performance et une meilleure lisibilité que: x.Année + ":" + x.Mois + ":" + .....
  • En fait, il a beaucoup de moins bonnes performances que a + b + c – il faut analyser la chaîne de format. Il peut également être moins lisible. Aussi, l'appel de String.Format("{0}", something) (sans chaîne de format ou de concaténation est juste stupide)
  • SLaks, je vous remercie pour votre réponse. Mais quelle est l'alternative? Sans l'aide de la chaîne de Format j'ai besoin d'aller à travers la boxe (comme votre secondes posté code). J'ai besoin de construire un date/heure. Dans mes tests de la chaîne.Le Format est BEAUCOUP plus rapide. Dans les autres cas, il est une nouvelle chaîne créée pour chaque concaténation!
  • le string,Format("{0}", something) ne fonctionnera que si quelque chose est nul, tandis que something.ToString() va jeter référence nulle exception
  • En aparté, vous pouvez utiliser if (val is DateTime) pour remplacer votre condition

InformationsquelleAutor Chris | 2010-08-24