【问题标题】:How do I make an arraylist public如何公开一个数组列表
【发布时间】:2012-04-18 12:34:45
【问题描述】:

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

【问题讨论】:

  • 您的代码无法编译。你的构造函数是DetectorCollection,但你的类是SensorCollection
  • 文件是否在同一个命名空间中?
  • 您使用的是 .net 1.x 还是为什么使用 ArrayList 而不是 List<T>

标签: c# arraylist


【解决方案1】:

如果您像这样创建 SensorCollectionArray:

SensorCollectionArray mySCA = new SensorCollectionArray();

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

mySCA.SensorArrayList.Add(mySensorCollection);

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

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

【讨论】:

  • 我会说他应该肯定考虑使用泛型。如果您使用的是 .NET 2 或更高版本,那么使用 ArrayList 并没有真正令人信服的理由。
【解决方案2】:

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

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

否则,你可以只使用一个

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

编辑

如何访问动态创建的每个传感器的 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);

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

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

【讨论】:

  • 感谢您的回复。我有可变数量的传感器。我为每个传感器动态创建子选项卡。我想要一个类来保存三个字符串成员(ipaddr、portnum、loc)。这些成员通过 .ini 文件填充。成员需要在其他文件中访问,这就是我挂断电话的地方。例如如何访问动态创建的类列表中每个传感器的 IP 地址?
  • 让我澄清一下我之前的帖子。我想要一个传感器类的动态数组。在第一个文件中,我可以使用以下命令访问每个成员: (SensorArrayList[0] as SensorDataCollection).ipAddress 但我似乎无法访问另一个文件中的类成员。 SensorArrayList[i]
  • 我稍微编辑了我的答案。看看是否有帮助。当然,您可以通过几种不同的方式来实现您的特定目标(例如创建自己的实现 IList 的自定义集合,或者仅使用 List 而根本不使用自定义集合类),因此您可能需要考虑这些替代方案.
  • 我已经实现了你上面的建议,可以
  • 我已经实施了您的上述建议,可以填写我的传感器列表。现在,当我转到一个单独的文件 mainForm.cs 时,我正在尝试访问这个传感器阵列的成员。 AdvancedSettingsForm.DetectorCollection myMainFormDetectorCollection = new AdvancedSettingsForm.DetectorCollection();但是这个类在这个实例中是不可见的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2014-06-04
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多