2009-06-03 9 views
0

ポストバックの間に変数を保持したいので、アクセサを作成してviewstateに配置します。これらのうちどれにアクセスするのが最適な方法ですか?または、より良い選択肢がありますか?ビューステートの変数にアクセスする構文

オプション1:

private int Status 
{ 
    get 
    { 
     try 
     { 
      return (int)ViewState[@"__Status"]; 
     } 
     catch 
     { 
      return 0; 
     } 
    } 
    set 
    { 
     ViewState[@"__Status"] = value; 
    } 
} 

オプション2:

private int Status 
{ 
    get 
    { 
     if (ViewState[@"__Status"] is int) 
     { 
      return (int)ViewState[@"__Status"]; 
     } 
     else 
     { 
      return 0; 
     } 
    } 
    set 
    { 
     ViewState[@"__Status"] = value; 
    } 
} 

おかげ

編集:私はオプション2はコンパイルされません、まあC#2.0

答えて

4

は、ここで私はそれを行う傾向がある方法です:

private int Status 
{ 
    get { return (ViewState["MYSTATUS"] != null) ? (int)ViewState["MYSTATUS"] : 0; } 
    set { ViewState["MYSTATUS"] = value; } 
} 
+0

このメソッドについて忘れてしまいました。これまでも私のコードをより一貫して使用しようとしました。viewstate変数はこのアクセサによってのみ読み取られ/変更されるため、明示的なキャスト(ヌルでない場合)は問題ありません。ありがとう。 – Nick

1

を使用しています、私はそれが正しい方向だと思う。 ;-)このために例外を使用しないでください。代わりにViewState変数を検査してください。

+0

おっと、間違いです。修正しました、ありがとうございます。 – Nick

0

ない正確に答え、それはそのヌルを想定するのが妥当である0なぜ私は、その後、int?とプロパティタイプを使用しないと同じです

public int? MyProperty 
{ 
    get 
    { 
     return ViewState["status"] as int?; 

    } 
    set 
    { 
     ViewState["status"] = value; 
    } 
} 
+0

コードが作成している前提条件に応じて、返される値がnullであることを許可するとエラーポップアップが表示されたり、nullをチェックするためにコードを追加しなければならないことがあります。 – rjzii

関連する問題