2010-01-06 31 views
1

我有一個方法,返回一個通過解析文本文件創建的自定義類對象的數組。在我每次使用它的時刻,我正在重讀這個效率不高的文件。如何創建一個包含我的自定義類的靜態數組?

我所要做的是創建一個包含對象的數組,當頁面加載並將它們存儲在數組中時可以稍後使用。

的方法是:

public Album[] readArray(string sTextFilePath) 
    { 
     string[] allLines = File.ReadAllLines(Server.MapPath(sTextFilePath)); 
     Album[] Albums = new Album[allLines.Length]; 
     for (int i = 0; i < allLines.Length; i++) 
     { 
      string[] lineSplit = allLines[i].Split(','); 
      Albums[i] = new Album(); 
      Albums[i].ID = Convert.ToInt32(lineSplit[0]); 
      Albums[i].title = lineSplit[1]; 
      Albums[i].keyName = lineSplit[2]; 
     } 

     return Albums; 
    } 

和類很簡單,只需:

public class Album 
{ 
    public int ID { get; set; } 
    public string title { get; set; } 
    public string keyName { get; set; } 
} 

我以爲我可以使用類似的創建靜態對象:

static Album myAlbums[] = readArray("Albums.txt"); 

但我收到以下錯誤:

一個字段初始不能引用非靜態字段,方法或屬性「B2M._Default.readArray(字符串)」

我是新來的C#所以這可能是愚蠢的東西。 (隨意戳在我的大方向樂趣,如果是這樣的話!)

預先感謝任何幫助,

+0

「錯誤」 == ...? – Svish 2010-01-06 12:38:11

+0

@Svish:可能是'readArray()'不存在於靜態上下文中 – 2010-01-06 12:39:19

回答

5

「錯誤」是不是很描述。當您發佈一個問題並且您收到錯誤時,請說明錯誤是什麼。

在這種情況下,問題是您正嘗試從靜態上下文中調用實例方法(readArray),而未指定實例。

該方法似乎並不需要任何實例數據,所以你應該能夠使該方法是靜態的,一切都會好的。

我鼓勵你閱讀.NET命名約定,順便說一句。您可能還想考慮使用List<T>而不是數組。當你感覺更自信時,你也可以使用LINQ來簡化代碼 - 但是我會先等到你更熟悉C#。

+0

@Jon,謝謝你的指針。冒着顯示我的無知的風險,爲了使方法靜態,我只是將方法更改爲公共靜態相冊[]? – Ben 2010-01-06 12:43:35

+0

@Jon - 當我這樣做時,它似乎從Server.MapPath中丟失了Server名稱空間。給出以下錯誤:非靜態字段,方法或屬性'System.Web.UI.Page.Server.get'需要對象引用 – Ben 2010-01-06 12:45:21

+0

@Ben:是的,您只需添加靜態修飾符。我沒有發現Server.MapPath的用法 - 問題是這是一個實例屬性(即它屬於類型的實例,而不是類型本身)。相同的類型可以用在不同的地方,具有不同的映射......我不確定最好的解決方法。 – 2010-01-06 12:49:23

0

除了靜態情況下,應該不會是:

static Album[] myAlbums = readArray("Albums.txt"); 
+0

謝謝,Magnus。 – Ben 2010-01-06 12:54:56

相關問題