0

File1 で、3 つの文字列を持つクラスを作成しました。public 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;
4

2 に答える 2

2

次のように SensorCollectionArray を作成する場合:

SensorCollectionArray mySCA = new SensorCollectionArray();

次に、次のように ArrayList にアクセスできます (たとえば、アイテムを追加するため)。

mySCA.SensorArrayList.Add(mySensorCollection);

ただし、投稿したコードには SensorCollectionArray のコンストラクターが含まれていないため、インスタンス化後に SensorArrayList が null になることに注意してください。したがって、個別にインスタンス化された 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);

別のファイルのクラスのメンバーにアクセスできないようです

それらが同じ名前空間にあることを確認するか、作成するクラスの名前空間を含む "using" ステートメントを含めるようにしてください。

于 2012-04-04T19:22:33.787 に答える