Я создал следующее свойство, которое выбрасывало InvalidCastException
, если получателем был доступен, когда ViewState[TOTAL_RECORD_COUNT]
был null
.C# Тип вывода Получает неправильный тип
public long TotalRecordCount
{
get { return (long)(ViewState[TOTAL_RECORD_COUNT] ?? -1); }
set { ViewState[TOTAL_RECORD_COUNT] = value; }
}
Моя мысль в том, что он неправильно пытался распаковать объект в ViewState[TOTAL_RECORD_COUNT]
к int
, который не удалось, поскольку он содержал long
, но я думаю, что может быть недостаток в этой логике. Я оставлю его в качестве упражнения для читателя, чтобы указать на этот недостаток.
Я так изменилась, что свойство для чтения
public long TotalRecordCount
{
get { return (long?)ViewState[TOTAL_RECORD_COUNT] ?? -1; }
set { ViewState[TOTAL_RECORD_COUNT] = value; }
}
, который работает только набухать. Тем не менее, мне остается недоумевать, что было не так с моей оригинальной версией ... StackOverflow на помощь?
Обратите внимание, что, если я пытаюсь выполнить (long)(ViewState[TOTAL_RECORD_COUNT] ?? -1)
в окне Immediate, я получаю сообщение об ошибке Cannot unbox 'ViewState[TOTAL_RECORD_COUNT] ?? -1' as a 'long'
и если я исполню (ViewState[TOTAL_RECORD_COUNT] ?? -1).GetType().Name
я получаю Int32
. Я могу выполнить (long)-1
и в итоге получить -1 как Int64
... так что случилось?
Положите это значение в сеанс! Оставьте ViewState только для пользовательского интерфейса, чувак. – Randolpho
Это может помочь вам понять, что здесь происходит. http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx –
Сессия, кстати, не дружественна к табу. –