【问题标题】:How to remove an element from an array in C# [duplicate]如何从 C# 中的数组中删除元素 [重复]
【发布时间】:2016-01-11 00:15:19
【问题描述】:

所以我在这里是我的代码:我有 2 种形式, - form1 中的按钮将您带到 form2 。 -form2 里面有Datagridview - 在表格 1 中输入信息(姓名、年龄),然后将它们加载到表格 2 的数据网格视图中 - 当我选择一行来删除数据网格视图时,我希望该行也从数组中删除。(我该怎么做) 提前谢谢你

class Class1
{
   public struct client
    {
        public string nom;
        public string prenom;
        public int age;
    }

   public static client[] TC = new client[100];
   public static int i = 0;
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button3_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.Show();
    }

    private void btn_ajouter_Click(object sender, EventArgs e)
    {

        Class1.TC[Class1.i].nom = textBox_nom.Text;
        Class1.TC[Class1.i].prenom = textBox_prenom.Text;
        Class1.TC[Class1.i].age = int.Parse(textBox_age.Text);

        textBox_age.Clear();
        textBox_nom.Clear();
        textBox_prenom.Clear();

        Class1.i = Class1.i + 1;
    }
}


public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void btn_afficher_Click(object sender, EventArgs e)
    {
        dataGridView1.Rows.Clear();
        for (int j = 0; j <= Class1.i-1; j++)
        {
            dataGridView1.Rows.Add(Class1.TC[j].nom,Class1.TC[j].prenom,Class1.TC[j].age);
        }
    }

    private void btn_supprimer_Click(object sender, EventArgs e)
    {
        dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
    }
}

【问题讨论】:

  • 你有什么问题?你到底卡在哪里了?您如何尝试从数组中删除元素? (提出的重复问题对此有一些很好的解决方案。)

标签: c# arrays


【解决方案1】:

这是从数组中删除项目的扩展方法:

public static T[] RemoveAt<T> (this T[] arr, int index) {
    return arr.Where ((e, i) => i != index).ToArray ();
}

由于数组在 C# 中是不可变的,因此您实际上无法从数组中删除元素。 扩展方法返回一个删除指定元素的新数组,所以你应该这样调用它:myarr = myarr.RemoveAt (index);

【讨论】:

  • 这不会从数组中“删除”任何东西,它会创建一个没有该元素的第二个数组,所以每次你都会得到一个新数组。
  • 该代码放在哪里?因为我有一个删除按钮,可以从 datagridview 中删除行
  • @CharafB.:此代码将放在扩展方法的静态类中:msdn.microsoft.com/en-us/library/bb383977.aspx
  • 对不起,我看不懂你的代码,我是初学者,不知道怎么用你的代码
  • @CharafB。创建一个静态类,将using System.Linq;添加到文件顶部并将代码粘贴到类中。然后你就可以像这样使用它了:myarray = myarray.RemoveAt (index);@RonanThibaudau 编辑了问题以澄清这一点
【解决方案2】:

您不能从数组中“删除”,数组的大小是固定的。您创建一个包含 100 个客户端的数组,总会有 100 个客户端,您应该改用 List 并使用其上的添加/删除方法来更改其元素。

【讨论】:

  • 好,但请你帮我写代码,我在上面展示了我所做的
  • 不,这回答了你的问题,但你需要编写自己的代码,正如我所说,通过删除数组并用 List 替换它来重写这个类,而不是它完成数组所做的所有事情,但是也是可以修改的。
【解决方案3】:

您可以像这样创建与您的数组相同的新列表

var yourList = yourArray.ToList();

yourList.Remove(someValue)
// to remove a specific value from your array

 yourList.RemoveAt(someIndex)
// to remove value from specific index.

【讨论】:

  • 这将如何修改数组?
  • 这根本不会从数组中删除,它会创建一个新列表并从该新列表中删除,该数组完全不受影响,因为您从不存储列表本身也不是任何东西,除了分配内存之外,这基本上是一个功能性的无操作。
  • 好的;并从列表中删除后;没有从数组中删除,我需要一个不包含我删除的元素的新数组。
  • 谢谢你的回答,但我说的还没有完成
  • 只要使用列表就可以了
猜你喜欢
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 2013-05-20
  • 2011-07-03
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多