J'ai créé la propriété suivante, qui a généré un InvalidCastException
si le getter a été accédé lorsque ViewState[TOTAL_RECORD_COUNT]
était null
.Inférence de type C# obtient le type incorrect
public long TotalRecordCount
{
get { return (long)(ViewState[TOTAL_RECORD_COUNT] ?? -1); }
set { ViewState[TOTAL_RECORD_COUNT] = value; }
}
Ma pensée est que mal tenté de unbox l'objet ViewState[TOTAL_RECORD_COUNT]
à un int
, qui a échoué parce qu'elle contenait une long
, mais je pense qu'il pourrait y avoir une faille dans cette logique. Je vais laisser au lecteur le soin de signaler ce défaut.
J'ai depuis changé cette propriété pour lire
public long TotalRecordCount
{
get { return (long?)ViewState[TOTAL_RECORD_COUNT] ?? -1; }
set { ViewState[TOTAL_RECORD_COUNT] = value; }
}
qui travaille la houle juste. Pourtant, je me suis demandé ce qui n'allait pas avec ma version originale ... StackOverflow à la rescousse?
Notez que si je tente d'exécuter (long)(ViewState[TOTAL_RECORD_COUNT] ?? -1)
dans la fenêtre immédiate, je reçois le message d'erreur Cannot unbox 'ViewState[TOTAL_RECORD_COUNT] ?? -1' as a 'long'
et si j'exécute (ViewState[TOTAL_RECORD_COUNT] ?? -1).GetType().Name
je reçois Int32
. Je peux exécuter (long)-1
et finir avec -1 comme Int64
... alors quoi de neuf?
Mettez cette valeur en session! Laissez ViewState uniquement pour l'interface utilisateur, mec. – Randolpho
Cela pourrait vous aider à comprendre ce qui se passe ici. http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx –
La session n'est pas conviviale, d'ailleurs. –