2011-05-22 54 views
0

我在C#中有一个结构,并根据我在此处表示的代码定义和数组列表。我在我的数组列表中添加项目,但我需要从列表中删除几行。你能帮助我,我如何从我的结构数组列表中删除一个或多个项目:如何从C#中的结构数组中删除一个项目#

public struct SwitchList 
    { 
     public int m_Value1, m_Value2; 
     public int mValue1 
     { 
      get { return m_Value1; } 
      set {m_Value1 = value; } 
     } 

     public int mValue2 
     { 
      get { return m_Value2; } 
      set {m_Value2 = value; } 
     }  
    } 

    //Define an array list of struct 
    SwitchList[] mSwitch = new SwitchList[10]; 

    mSwitch[0].mValue1=1; 
    mSwitch[0].mValue2=2; 

    mSwitch[1].mValue1=3; 
    mSwitch[1].mValue2=4; 

    mSwitch[2].mValue1=5; 
    mSwitch[2].mValue2=6; 

现在我该怎么删除我的项目之一,例如第1项 谢谢。

+0

你应该给仿制药一出手 – Brad 2011-05-22 06:04:44

回答

5

数组是固定长度的数据结构。

您将需要创建一个新的数组,其大小比原始数组小一个,并将所有项目复制到该数组中,除了您想要删除的项目,并开始使用新数组而不是原始数组。

为什么不使用List<T>代替?这是一个动态结构,可让您添加和删除项目。

0

这是不可能的,因为数组是固定大小的元素块。由于结构是值类型而不是引用类型,因此您也不能只设置元素zo null。一种选择是创建一个新的小阵列并将剩余的值复制到新阵列中。但更好的方法是在我看来使用List。

0

如果你真的,真的想用数组和左右移动的东西,在这里是如何做到这一点的例子:

{ 
    // Remove first element from mSwitch using a for loop. 
    var newSwitch = new SwitchList[mSwitch.Length - 1]; 
    for (int i = 1; i < mSwitch.Length; i++) 
     newSwitch[i - 1] = mSwitch[i]; 
    mSwitch = newSwitch; 
} 
{ 
    // Remove first element from mSwitch using Array.Copy. 
    var newSwitch = new SwitchList[mSwitch.Length - 1]; 
    Array.Copy(mSwitch, 1, newSwitch, 0, mSwitch.Length - 1); 
    mSwitch = newSwitch; 
} 
1

你将需要移动元素并调整数组(是昂贵的),因为有一些复杂性,你想要隐藏在只展示集合的类中,而不公开它的存储实现细节。幸运的是,微软已经提供了一个名为List<T>的类,其中System.Collections.Generic名称空间中的一些其他类型集合符合最常见的收集需求。

作为一个侧面说明,你应该使用自动属性,而不是琐碎的属性风格,你哈