如何公开arraylist

时间:2012-04-04 18:37:03

标签: c# arraylist

在File1中,我创建了一个包含3个字符串的类。我用公共arraylist创建了另一个类。我希望这个arraylist是动态的,它包含的对象是带有3个字符串的类。 我可以访问文件中的类成员,但不能访问单独的文件。

文件1

public class SensorCollection
    {
        public string ipAddress;
        public string portNumber;   
        public string physicalLocation;

        public DetectorCollection(string ipAddr, string portNum, string loc)
        {
            this.ipAddress = ipAddr;
            this.portNumber = portNum;
            this.physicalLocation = loc;

        }
    }
    public class SensorCollectionArray
    {
        public System.Collections.ArrayList SensorArrayList;
    }

...
System.Collections.ArrayList DetectorArrayList = new System.Collections.ArrayList(); 
...
  DetectorArrayList.Add(new DetectorCollection(ipAddress, portNum, str));

所以我可以填充类数组但不能在单独的文件中访问它。 文件2

    AdvancedSettingsForm.SensorCollectionArray mainDetectorCollectionArray;
    System.Collections.ArrayList arrList;

2 个答案:

答案 0 :(得分:2)

如果你像这样创建一个SensorCollectionArray:

SensorCollectionArray mySCA = new SensorCollectionArray();

然后您可以像这样访问它的ArrayList(例如,添加项目):

mySCA.SensorArrayList.Add(mySensorCollection);

但请注意,在您发布的代码中,您没有包含SensorCollectionArray的构造函数,因此SensorArrayList在实例化后将为null。因此,您可以将其设置为单独实例化的ArrayList,也可以在SensorCollectionArray类中创建ArrayList。

最后注意事项:如果要创建强类型集合,可能需要查看通用List(of T)类

答案 1 :(得分:0)

不完全确定尝试做什么,但我认为它类似于下面的内容。据推测,您正在创建一个传感器集合,因为您希望在将其存储到集合之前应用某种规则。

“这是一个很好的传感器吗?它是?将它添加到集合中!”

否则,你可以使用

List<Sensor> mySensors;

并没有真正使用一个基本上做同样事情的类。除此之外,就像它已经提到的那样,没有理由使用ArrayList。正如Marc在此指出的那样,使用ArrayList的最令人信服的理由是you're using .NET 1.1;否则,你应该使用通用的List集合以及它为你做的所有伟大的事情。

//Sensor.cs
public class Sensor
{
    public string Ip{ get; set; }
    public string Port{ get; set; }
    public string PhysicalLocation{ get; set }

    public Sensor(string ipAddr, string portNum, string loc)
    {
        Ip= ipAddr;
        Port= portNum;
        PhysicalLocation= loc;
    }
}

//SensorCollection.cs
public class SensorCollection
{
    private List<Sensor> sensors;

    public Sensor this[int i]
    {
        get { return this.sensors[i]; }
        set { this.sensors[i] = value; }
    }

    public IEnumerable<Sensor> Sensors
    {
        get{ return this.sensors; }
    }

    public SensorCollection()
    {
        sensors = new List<Sensor>();
    }

    public SensorCollection(string ip, string port, string location) : this()
    {
        this.sensors.Add(new Sensor(ip, port, location));
    }

    public SensorCollection(Sensor sensor) : this()
    {
        this.sensors.Add(sensor);
    }

    public void AddSensor(Sensor sensor)
    {
        //Determine whether or not to add it
        this.sensors.Add(sensor);
    }

    public void RemoveSensor(Sensor sensor)
    {
        if (sensors.Contains(sensor))
            sensors.Remove(sensor);
    }
}

修改

  

如何在动态创建的每个传感器中访问ipaddress   课程列表?

var mySensors = new SensorCollection();
mySensors.AddSensor(new Sensor("1.1.1.1", "123", "Home"));
mySensors.AddSensor(new Sensor("9.9.9.9", "123", "Work"));

foreach(Sensor s in mySensors.Sensors)
    Console.WriteLine(s.Ip);
  

我似乎无法访问另一个文件中的类成员

确保它们位于相同的命名空间中,或者包含一个“using”语句,其中包含您创建的类的命名空间。