9
votes

Pourquoi "comme t" a-t-il une erreur, mais le casting avec (t) ne reçoit pas une erreur?

Pourquoi puis-je faire ceci: xxx

mais pas ceci: xxx

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 ".


0 commentaires

5 Réponses :


6
votes

Si T est un type de valeur Ceci est une exception, vous devez vous assurer que T est nullable ou une classe.


0 commentaires

23
votes

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;
}


1 commentaires

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/...



1
votes

est t un type de valeur? Si tel est le cas, si l'opérateur comme échoue, il retournera null , qui ne peut pas être stocké dans une valeur de valeur.


0 commentaires

0
votes

Extension sur Yuriy Faktorovichs Réponse:

public T GetMainContentItem<T>(string moduleKey, string itemKey) where T: class
{
    return GetMainContentItem(moduleKey, itemKey) as T;
}


0 commentaires

0
votes

parce que comme t récupère null dans le cas où il ne peut pas lancer sur t par opposition à (t) qui jette une exception. Donc, si t n'est pas nullable ou classe il ne peut pas être null ... Je pense.


0 commentaires