0

在 File1 中,我创建了一个包含 3 个字符串的类。我用公共数组列表创建了另一个类。我希望这个数组列表是动态的,它包含的对象是具有 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;
4

2 回答 2

2

如果您像这样创建 SensorCollectionArray:

SensorCollectionArray mySCA = new SensorCollectionArray();

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

mySCA.SensorArrayList.Add(mySensorCollection);

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

最后说明:如果要创建强类型集合,您可能需要查看通用 List(of T) 类

于 2012-04-04T19:01:40.280 回答
0

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

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

否则,您可以只使用

List<Sensor> mySensors;

而不是真正使用本质上会做同样事情的类。除此之外,就像已经提到的那样,没有真正的理由使用 ArrayList。正如 Marc 在这里指出的那样,使用 ArrayList 最令人信服的理由是,如果您使用的是 .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);
    }
}

编辑

如何访问动态创建的类列表中每个传感器的 IP 地址?

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);

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

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

于 2012-04-04T19:22:33.787 回答