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>