-1
SubnetConvert SubnetOctet1 = new SubnetConvert();
SubnetConvert SubnetOctet2 = new SubnetConvert();
SubnetConvert SubnetOctet3 = new SubnetConvert();
SubnetConvert SubnetOctet4 = new SubnetConvert();

    int Octet1 = int.Parse(txtOctet1.Text);
    SubnetOctet1.OctetConvert = Octet1;
    lblOctet1.Text = SubnetOctet1.SendBinary;

    int Octet2 = int.Parse(txtOctet2.Text);
    SubnetOctet2.OctetConvert = Octet2;
    lblOctet2.Text = SubnetOctet1.SendBinary;

    int Octet3 = int.Parse(txtOctet3.Text);
    SubnetOctet3.OctetConvert = Octet3;
    lblOctet3.Text = SubnetOctet1.SendBinary;

    int Octet4 = int.Parse(txtOctet4.Text);
    SubnetOctet4.OctetConvert = Octet4;
    lblOctet4.Text = SubnetOctet1.SendBinary;

このすべてのコードを次のようなForループに入れることは可能ですか?

For (int i = 1; i <=4; i++)
{
SubnetConvert SubnetOctet[i] = new SubnetConvert();

    int Octet[i] = int.Parse(txtOctet[i].Text);
    SubnetOctet[i].OctetConvert = Octet[i];
    lblOctet[i].Text = SubnetOctet[i].SendBinary;
}

上記のコーディングを試しましたが、機能しません。達成したいことの例として、そこに配置しました。

4

3 に答える 3

3

コードサンプルは不可能です-あなたが示したように、コントロール配列はサポートされていません。

より良い方法は、繰り返しコードをカプセル化し、異なるパラメーターを渡す関数を作成することです。

private void SetBinaryValue(string value, Label display)
{
    int Octet = int.Parse(value);
    SubnetOctet.OctetConvert = Octet;
    display.Text = SubnetOctet.SendBinary;
}

この関数は次のように呼び出します。

SetBinaryValue(txtOctet1.Text, lblOctet1);
SetBinaryValue(txtOctet2.Text, lblOctet2);

このアプローチでは1つだけ必要であることに注意してくださいSubnetConvert(関数内で初期化することも、フィールドとして初期化することもできます)。

于 2011-12-21T13:10:50.643 に答える
0

以下を使用して、名前付きコントロールをループすることは完全に可能FindControlです。

var subnetOctet = new SubnetConvert();

for (int i = 1; i <= 4; ++i) {
    // ID suffix as string
    var indexText = i.ToString(CultureInfo.InvariantCulture);

    // ID of TextBox and Label
    var textBoxId = "txtOctet" + indexText;
    var labelId = "lblOctet" + indexText;

    // The TextBox and the Label
    var textBox = (TextBox)FindControl(textBoxId);
    var label = (Label)FindControl(labelId);

    // Parse the value into an int
    int octet = int.Parse(textBox.Text);

    subnetOctet.OctetConvert = octet;

    // Update the TextBox's Test
    label.Text = subnetOctet.SendBinary;
}

この方法を使用する利点の1つは、オンザフライで、またはプログラムでさらにコントロールを追加できることです。処理する必要のあるサブネットの数を追跡している場合は、コードを更新する必要はありません。

于 2011-12-21T13:22:02.450 に答える
-1

オブジェクトを要素として配列を作成し、配列をループして、ループ位置での配列位置に基づいて関数を実行することもできます。

Dog pet1 = new Dog();
        Dog pet2 = new Dog();
        Dog pet3 = new Dog();
        Dog pet4 = new Dog();

        //create a list of pets and add your pets to them
        List<Dog> pets = new List<Dog>();
        pets.Add(pet1);
        pets.Add(pet2); 
        pets.Add(pet3);
        pets.Add(pet4);


        //Using a for each loop to go through each element in the array and execute identical actions on each 
        //element
        foreach (Dog pet in pets)
        {
            pet.SetName("Fido");
        }

        //or create a for each loop that will allow you to know the position 
        //you are currenly at in the arry as the integer of i increments in the loop
        for (int i = 0; i <= pets.Count; i++)
        {
            pets[i].SetName("Fido");
        }

理想的には、単一のオブジェクトを作成し、別のループを介してオブジェクトの複数のインスタンスをリストに挿入してから、foreachまたはforループを使用してリストの要素にアクセスし、単一のインスタンスを操作します。

Dog dog = new Dog();

        //create a list of pets and add your pets to them
        List<Dog> pets = new List<Dog>();

        for (int i = 0; i <= 5; i++)
        {
            pets.Add(dog);
        }

        //Using a for each loop to go through each element in the array and execute identical actions on each 
        //element
        foreach (Dog pet in pets)
        {
            pet.SetName("Fido");
        }
于 2016-02-01T14:39:43.193 に答える