如何创建包含自定义类的静态数组?

时间:2010-01-06 12:33:42

标签: c# asp.net

我有一个方法,它返回一个通过解析文本文件创建的自定义类对象数组。目前我每次使用它时都会重新读取效率不高的文件。

我要做的是在页面加载时创建一个包含对象的数组,并将它们存储在一个数组中,然后可以在以后使用。

方法是:

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(string)'

我是C#的新手,所以这可能是愚蠢的。 (如果是这种情况,请随意向我的大方向发出乐趣!)

提前感谢您的任何帮助,

2 个答案:

答案 0 :(得分:5)

“错误”不是很具描述性。当您发布问题并且收到错误时,请说明错误是什么。

在这种情况下,问题是您尝试从静态上下文调用实例方法(readArray),而不指定实例。

该方法似乎不需要任何实例数据,因此您应该能够使方法保持静态,并且一切都会很好。

我建议您阅读.NET命名约定,顺便说一句。您可能还想考虑使用List<T>而不是数组。当你感到更自信时,你也可以使用LINQ使这段代码变得更简单 - 但我会等到你对C#更熟悉。

答案 1 :(得分:0)

除静态上下文外,不应该是:

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