将值添加到来自不同类的C#数组

时间:2012-03-08 01:15:53

标签: c# .net arrays

我正在尝试将用户在单独的窗体上输入的新值添加到以下数组中:

public class NameValue
  {
    public string Name;
    public string Value;
    public NameValue() { Name = null; Value = null; }
    public NameValue(string name, string value) { Name = name; Value = value; }
  }

   public class DefaultSettings
  {
    public static NameValue[] Sites = new NameValue[] 
    {
        new NameValue("los angeles, CA", "http://losangeles.craigslist.org/"),
    };

    public static NameValue[] Categories = new NameValue[] 
    {
        new NameValue("all for sale", "sss"),
    };
   }

如何在保留旧数组值的同时将新值添加到数组中?

修改

我尝试使用Noren先生的功能:

        static void AddValueToSites(NameValue newValue)
    {
        int size = DefaultSettings.Sites.Length;
        NameValue[] newSites = new NameValue[size + 1];
        Array.Copy(DefaultSettings.Sites, newSites, size);
        newSites[size] = newValue;
        DefaultSettings.Sites = newSites;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        NameValue newSite = new NameValue("Test, OR", "http://portland.craigslist.org/"); 
        AddValueToSites(newSite);
        Close();
    }

但那不起作用......我从中获取数据的课程是:

public partial class Location : Office2007Form
{
    public Location()
    {
        InitializeComponent();
    }
    static void AddValueToSites(NameValue newValue)...
    private void button1_Click(object sender, EventArgs e)...
}

4 个答案:

答案 0 :(得分:5)

您永远无法更改数组的大小。你需要使用类似List的东西。

由于您使用的是名称/值对,因此应考虑使用Dictionary<TKey,TValue>

最后,如果你想让不同的类贡献给数组的内容,那就不会发生了。

答案 1 :(得分:4)

您无法添加到数组中,无论是否在其他类中。

使用List<NameValue>代替NameValue[],然后您可以使用Sites.Add(...)

答案 2 :(得分:2)

如果您对使用数组与更灵活的集合的想法完全结合,则应在定义基值的类中实现一些AddX()方法。这些方法将负责在数组中插入新值。如果您不关心多线程问题,可以非常简单:

(警告:代码来自我的头脑而未经过测试)

static void AddValueToSites(NameValue newValue)
{
    int size = Sites.Length;
    NameValue[] newSites = new NameValue[size+1];
    Array.Copy(Sites, newSites, size);
    newSites[size] = newValue;
    Sites = newSites;
}

再次为分类。

与其他建议一样,使用List<NameValue>Dictionary<string,string>会更流畅。这些已经有了Add,Remove,Contains等等 - 基本上你需要操作数组时就需要了。

答案 3 :(得分:1)

数组不是可变的,所以如果你调整它们(使用任何方法),它将导致创建一个不同的实例(这是VB.NET的ReDim中发生的事情,但它们将它隐藏起来)。

在C#中调整数组大小的最简单方法是使用Concat扩展方法(需要System.Linq):

string[] myArray = new string[] { "Hello", "World" };
myArray = myArray.Concat(new string[] { "Something", "new" };

myArray现在将是4个元素。我不认为这会在课程之间起作用(尽管没有尝试过)。