2012-01-04 101 views
5

我找不到與此問題有關的任何信息。我試圖在C#中創建一個全局數組,以便我可以在代碼中的不同位置向它輸入信息,然後稍後再調用該信息以顯示它。例如,我要採取以下信息,並把它放入數組:聲明和使用全局數組c#

string auctionID; 
string itemName; 
string itemID; 
string bid; 
string buyout; 
string quantity; 

那麼我希望能夠調用數組與for循環,或類似的東西,這樣我就可以顯示該信息晚些時候。現在,我忘記提到的一件事是,我可能需要一個數組數組或一個多維數組。原因是因爲我將有許多不同的拍賣和每次拍賣的數據(因此上面的變量),我想在程序的最後顯示這些信息。感謝您的時間!

更新1

所以,我想我不會讓自己清楚,因爲我越來越糊塗,但也可能是因爲我在這個節目的那一刻有點沮喪。我希望能夠創建一個全局數組,然後用我的程序中的不同函數設置存儲在該數組中的信息,因爲不同的函數將修改該數組的不同部分。另外,如果我理解了如何工作或者甚至有鏈接來閱讀它,我不會介意使用緩存。最後要補充的是,我在Windows Phone 7上執行此操作,因此我限制了可以使用的庫和系統調用。

更新2

我對OOP頗有幾分生疏,所以我會去更多閱讀起來就可以了(由於處理一噸的HTML,而不是真的有機會做真正的編程)。感謝大家的建議。如果我無法弄清楚什麼,我可能會回覆這個話題。乾杯!

+1

不,不這樣做。我們現在不使用全局數組。 – Richard 2012-01-04 21:39:13

+0

使用緩存會比全局數組更好,因爲您可能會遇到併發性和多線程問題。 – Kane 2012-01-04 21:40:00

+0

「每當我對數組進行單獨調用時,我都不知道如何調用同一個數組,因爲據我所知,C#將數組視爲對象。」這沒有任何意義。你爲什麼認爲數組是對象意味着你不會每次都得到「相同的數組」? – 2012-01-04 21:40:56

回答

7

全局變量幾乎總是一個壞主意導航,所以C#使創建他們很難的事情。但是,如果你真的想,你可以做這樣的事情:

public static class GlobalData 
{ 
    public static string[] Foo = new string[16]; 
}; 

// From anywhere in your code... 
Console.WriteLine(GlobalData.Foo[7]); 

但是請注意,只要你不得不創建一個靜態類來做到這一點,爲什麼不繼續前進,使實際數組變量私有,而不是公共,然後添加靜態,公共getter和setter方法?這種方法至少消除了全球變量固有的一些危險。

1
string[] values; 

或宣佈某一特定長度的一個:

string[] values = new string[6]; // creates an array with a length of 6. 
+0

哦,我明白了。問題是,我不知道該怎麼做,以便不同的方法可以調用該數組並使用它內部的信息。 – th3n3wguy 2012-01-04 21:39:52

+0

技術上正確,但實際上並沒有回答IMHO的問題。 – 2012-01-04 21:43:20

+0

@thenewguy請閱讀更多關於面向對象的編程和設計模式。你仍然在考慮採用非OOP方式。 – 2012-01-04 21:49:07

2

好了,除了事實上,你可能有一個結構性的問題,如果你存儲在全球的東西。

您可以對此使用靜態屬性。

public class MyVariables 
{ 
    private static string[] _MyStuff 
    public static string[] MyStuff 
    { 
      return _MyStuff; 
    } 
} 

然後訪問它是這樣的:

MyVariables.MyStuff[0] 
+0

你也可以聲明這個類本身是靜態的('public static class MyVariables'),儘管這不是很重要 - 它只會阻止用戶毫無意義地實例化一個對象。 – MusiGenesis 2012-01-04 21:42:39

4

在C#中沒有全局變量。只有班級成員。將數據從應用程序的一部分傳遞到另一部分的最佳方式是將對某個對象(類的一個實例)的引用傳遞給其成員中的所有相關數據。

你也可以使用靜態類,它們的行爲類似於全局變量,但是當你更熟悉面向對象編程時,你會意識到這不是一個處理數據的好方法。

2

我會使用像List一樣的泛型,因爲您不必擔心大小,並且您可以在foreach循環中爲它獲取迭代器。

List<string> values = new List<string>(); 

插入一個項目:

values.Add("item"); 

刪除:

values.Remove("item"); 

如果你想多維再使用:

List<List<string>> multi_dimens_values; 
1

我認爲Dictionary<string, string>會更加合適...您可以遍歷它並訪問特定的項目。並傳遞給你的方法。

1

這是一個非常糟糕的主意。

  1. 儘可能避免全局變量。有幾個例子你需要一個公開的,可變的單身人士。
  2. 使用顯式對象(PO​​CO)而不是多維數組。請參閱下面的示例
  3. 改爲根據需要從存儲創建/保存/加載對象。

    class拍賣 { public long Id {get;設置;} public string ItemName {get;設置;} ... }

9

我不建議你使用全局陣列,是不是你需要什麼是最好的做法是一種數據存儲庫,並從那裏取數據要使用,關於你要使用的結構,我建議你做這樣的事情:

public class Auction 
{ 
      public string auctionID {get; set;} 
      public string itemName {get; set;} 
      public string itemID {get; set;} 
      public string bid {get; set;} 
      public string buyout {get; set;} 
      public int quantity {get; set;} 
} 

,然後使用該特定對象的列表來訪問您的數據。

List<Auction> acutions = new List<Auction>(); 

然後您可以根據需要添加或刪除項目。

auctions.Add(auction object); 
auctions.remove(auction object); 

或者通過列表與foreach循環

foreach (Auction item in auctions) 
{ 
// your code to handle items here 
}