次のプロパティを作成しました。これは、がであったときにInvalidCastException
ゲッターにアクセスした場合にスローします。ViewState[TOTAL_RECORD_COUNT]
null
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)
イミディエイトウィンドウで実行しようとするとエラーメッセージが表示され、実行すると。が表示されることに注意しCannot unbox 'ViewState[TOTAL_RECORD_COUNT] ?? -1' as a 'long'
て(ViewState[TOTAL_RECORD_COUNT] ?? -1).GetType().Name
くださいInt32
。私は実行(long)-1
して、最終的に-1として終わることができInt64
ます...それで、どうしたのですか?