Last active
October 14, 2022 22:59
-
-
Save gothedistance/5243455 to your computer and use it in GitHub Desktop.
Sessionに格納する値が連想配列とオブジェクトのどっちがいいかという話
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Dictionary<string,string> dict = new Dictionary<string,string>(); | |
dict.add("name","POSTされた値"); | |
dict.add("address","POSTされた値"); | |
. | |
. | |
. | |
Session["data"] = dict; | |
//これを取り出す時にはこうなる | |
Dictionary<string,string>dict = (Dictionary<string,string>)Session["data"]; | |
string name = dict["name"]; | |
//この書き方では、もしも連想配列に取得したキーが違った場合にerrorが起きる。 | |
//dict["username"]で取得しようとすると、例外が発生しまう。 | |
//なので、オブジェクトを作ってこのような形で格納すると良い。 | |
FormData data = new FormData(); | |
data.name = "POSTされた値"; | |
data.address = "POSTされた値"; | |
Session["data"] = data; | |
//取り出しはこうなる | |
FormData data = (FormData)Session["data"]; | |
//ここが肝ですよ!! | |
string name = data.name; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Sessionに格納する値が連想配列とオブジェクトのどっちがいいかという話で、 c#ならオブジェクトを使うべき理由を書きました。
連想配列ですと、存在しないキーがあった場合に実行時にエラーが出てしまいます。
また、その連想配列の仕様が隠蔽されるのでSessionの中に格納された値が何なのか、
それが文字列なのか数値なのかも、よくわからなくなります。
なので、Sessionに格納する値はなるべくオブジェクトの方が便利ですし安全です。
オブジェクトにすれば、コンパイラが入力の保管もしてくれますし、存在しない
プロパティにアクセスすることはできません。
連想配列に比べて格納されるオブジェクトが可視化され、変数の型も予め予測出来ます。
複数画面で共有されるデータなら、なおさらオブジェクトにする方が良いでしょう。