Pourquoi puis-je faire ceci: mais pas ceci: p> Il se plaint que je n'ai pas limété le type générique assez, mais alors je penserais que la règle s'appliquerait à la coulée de "(t)" également ". p> p>
5 Réponses :
Si T est un type de valeur Ceci est une exception, vous devez vous assurer que T est nullable ou une classe. P>
Parce que "T" pourrait être un type de valeur et "comme t" n'a aucun sens pour les types de valeur. Vous pouvez le faire:
public T GetMainContentItem<T>(string moduleKey, string itemKey) where T : class { return GetMainContentItem(moduleKey, itemKey) as T; }
Votre réponse est incorrecte, vous pouvez lancer sur des types de valeur, le résultat sera nullable, voir cet article et la réponse de Jon Skeet: Stackoverflow.com/Questions/496096/...
est t code> un type de valeur? Si tel est le cas, si l'opérateur
comme code> échoue, il retournera
null code>, qui ne peut pas être stocké dans une valeur de valeur. P>
Extension sur Yuriy Faktorovichs Réponse:
public T GetMainContentItem<T>(string moduleKey, string itemKey) where T: class { return GetMainContentItem(moduleKey, itemKey) as T; }
parce que comme t code> récupère
null code> dans le cas où il ne peut pas lancer sur
t code> par opposition à
(t) code> qui jette une exception. Donc, si
t code> n'est pas
nullable code> ou
classe code> il ne peut pas être
null code> ... Je pense. p>