2013-02-19 68 views
0

我有一個靜態數組,它使用一個名爲Variables.rows的靜態變量來定義數組中的行數。 Variables.rows在另一個稱爲Variables的靜態類中定義。從任何地方訪問數組

public static class TheArrayClass 
{ 
    public static double[,] HiThere = new double[Variables.rows, 6]; 
} 

我的問題是,靜態數組創建只要在運行項目(我相信)。這意味着將正確值分配給Variables.Rows所需的方法不會及時執行。這意味着我在填充數組時遇到索引錯誤,因爲數組的大小不正確。

我需要一種解決方法,以便我可以從我的代碼中的任何地方訪問陣列。

+0

'Variables.Rows'定義在哪裏? – 2013-02-19 15:23:27

+1

行屬性來自哪裏,爲什麼數組需要是靜態的? – Jodrell 2013-02-19 15:24:38

+1

使用全局變量的可怕想法。有機會,如果你問如何做到這一點,你是新的語言 - 繼續閱讀,找到一種不使用全局變量的方式 – 2013-02-19 15:25:37

回答

1

有趣的是,您沒有顯示Variables.Rows的定義位置。無論哪種方式,你都可以在類的構造函數中執行你想要的任何初始化。

public static class TheArrayClass 
{ 
    public static double[,] HiThere; 

    static TheArrayClass() 
    { 
     HiThere = new double[Variables.rows, 6]; 
    } 
} 
+1

由於你的類是靜態的,構造函數將不起作用。您將需要創建一個類型初始值設定項('static TheArrayClass()')。否則,這看起來很好。 – 2013-02-19 15:32:17

+1

@ p.s.w.g哎呀!忘記了'static'關鍵字。 – 2013-02-19 15:33:22

+1

@ Johnathan-Wood:類型初始化程序不支持訪問修飾符。放棄'公共',你很好。 – 2013-02-19 15:34:08

0

我認爲你有一個設計問題,所以我會嘗試添加一些信息,可以幫助你解決你的問題。

首先,靜態類實際上是在項目運行後立即創建的。但是靜態類也可以有一個靜態構造函數(可以在其中定義變量.rows),一旦項目運行,它也會運行一次。另外,也許你應該使用一個ArrayList(http://msdn.microsoft.com/en-us/library/system.collections.arraylist.aspx)或GenericList(http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx),通過這樣做,你可以很容易地避免數組變量的限制(如改變其大小)。

+0

是的,大家都說全球化 - 任何事情都很糟糕,但不幸的是,現在我沒有時間去閱讀許多新的文檔。儘管感謝您的鏈接。 – user1920206 2013-02-19 15:39:22

+1

男人,不是。全球化是危險的,因爲他們是危險的人更喜歡避免它,但他們在那裏是有原因的,原因是:他們是有用的。但是,我認爲你的項目有問題。 – lolol 2013-02-19 15:41:12

+0

@ user1920206看一看:http://stackoverflow.com/questions/12306106/is-it-bad-form-to-try-and-have-classes-other-than-main-form1-interact-with-each/12306400#12306400 – lolol 2013-02-19 15:44:22

2

嘗試在窗體之間傳遞消息。

public partial class Form1 : Form 
{ 
    private string _data; 

    public Form1() 
    { 
     InitializeComponent(); 
     _data = "Some data"; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     var form2 = new Form2(); 
     form2.Data = _data; 
     form2.Show(); 
    } 
} 

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public string Data { get; set; } 
} 
+0

他在說什麼表單? – lolol 2013-02-19 15:36:05

+0

@lolol檢查對問題的意見。他希望使用全局靜態變量在他的表單之間傳遞數據,這是不好的做法。 – Romoku 2013-02-19 15:37:01

+0

我找不到評論,但我相信你,我會改變我的失望。抱歉。 – lolol 2013-02-19 15:38:37