c#数组列表中的对象

本文关键字:对象 列表 数组 | 更新日期: 2023-09-27 18:11:15

我来自Javascript背景,这可能是一件好事,尽管到目前为止这被证明是一件坏事。

在Javascript中,我有:

function doStuff(){
    var temp = new Array();
    temp.push(new marker("bday party"));
    alert(temp[0].whatsHappening); // 'bday party' would be alerted
}
function marker(whatsHappening) {
    this.whatsHappening = whatsHappening;
}

我现在想在C#中做同样的事情。我设立了一个班级:

class marker
{
    public string whatsHappening;
    public marker(string w) {
        whatsHappening = w;
    }
} 

并添加一个新对象,但我似乎无法以相同的方式调用数据:

ArrayList markers = new ArrayList();
markers.Add(new marker("asd"));
string temp = markers[0].whatsHappening; // This last bit isn't allowed

c#数组列表中的对象

使用通用List<T>

List<marker> markers = new List<marker>();
markers.Add(new marker("asd"));
string temp = markers[0].whatsHappening;

ArrayList是弱类型的。也就是说,数组中的所有项都是对象。你需要把它们投射到你的班级:

string temp = ((marker)markers[0]).whatsHappening;

您应该使用List<marker>

要从ArrayList使用它,必须首先将它强制转换为适当的类型。CCD_ 4将项目存储为CCD_。

var item = (marker)markers[0];
// item.Foo is now accessible

然而,假设您使用的是自2005年以来发布的C#版本(即C#2.0+(,那么您最好使用List<T>,其中T是对象的类型。它是强类型的,只能存储T类型的项,并且不需要强制转换来执行操作。

List<marker> markers = new List<marker>();
markers.Add(new marker()); // legal
markers.Add(1); // not legal, but would be allowed with ArrayList

List<T>在系统中可用。集合。通用命名空间。


无关,因为你是C#的新手,所以学习几乎所有C#开发人员都遵守的语言约定。一些基本的约定:类名、属性、方法是PascalCased,私有成员、参数、局部变量是基于camelBase的,类数据是作为属性公开的,而不是作为可公开访问的字段。

public class Marker
{
    public string WhatsHappening { get; set; } // exposed as property 
    string foo; // member field, is implicitly private
    public void DoFrobbing(Bar thingToFrob)
    {
        int localVariable;
    }
}

ArrayList包含Objects的列表。尝试使用通用System.Collections.Generic.List<T>:

List<marker> markers = new List<marker>();