2012-01-10 7 views
3

global.asaxStackオブジェクトを追加するにはどうすればアプリケーション全体からアクセスできますか?現時点では私が持っている:ASP.net C#グローバルに利用可能なオブジェクト

void Application_Start(object sender, EventArgs e) 
{ 
    // Global vars 
    Application.Add("ArcadeTotalUniquePlayers", 0); 
    Application.Add("ArcadeTotalPlays", 0); 
    Stack<int> ArcadeLastPlayers = new Stack<int>(16); 

最初の二つの変数は動作しますが、私はStackがグローバルにアクセス可能にするかどうかはわかりません。

あなたが行うことができ
+0

実際にこのオブジェクトを使用する必要はありますか?これは設計上の問題のようです。 –

+0

@ Ek0nomikこの質問に関連しているhttp://stackoverflow.com/questions/8797520/how-best-to-optimise-this-small-bit-of-c-sharp-linq-code私はグローバルスタックを使用してコードのスローコードを最適化する –

+2

@ Ek0nomik - グローバルに利用可能な変更可能なスタックはメンテナンスの悪夢のように聞こえる。 – ChaosPandion

答えて

4

Application.Add("ArcadeLastPlayers", new Stack<int>()); 

、その後

((Stack<int>)Application["ArcadeLastPlayers"]).Pop(); 

それとも、グローバル静的のいくつかの並べ替えを作ることができるので、あなたはそれをあなたがそれを取得する必要があるたびにキャストする必要はありません:

namespace GlobalUtils { 
    public static class ArcadeData { 
     public static Stack<int> ArcadeLastPlayers = new Stack<int>(); 
    } 
} 

、その後

あなたがHttpApplcationStateを使いたい場合は
GlobalUtils.ArcadeData.ArcadeLastPlayers.Pop(); 
+1

ありがとう、私はglobal.asaxを初めて使っています。そのクラスをglobal.asaxで宣言すると、コンテンツページからどのように値にアクセスできますか? –

+0

いいえ、世界中のどこかでクラスを宣言するだけで、ウェブサイトにアクセスできることを確認してから、あなたのページやコントロールの中で 'Namespace.Utils.ArcadeLastPlayers.Pop(); 'と言うだけです。 –

+0

Utils.ArcadeLastPlayersここの例に基づいています。 –

2

、あなただけの次の操作を行うことができるはずです。

Application.Add("ArcadeLastPlayers", new Stack<int>(16)); 

HttpApplicationStateは名前と関連する値としてオブジェクトの文字列を取ります。 「ArcadeLastPlayers」の値を取得するときにスタックにキャストするだけです。

関連する問題