从其他类向C#数组添加值

从其他类向C#数组添加值,c#,.net,arrays,C#,.net,Arrays,我正在尝试将用户在单独的windows窗体上输入的新值添加到以下数组中: 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; } }

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

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"),
    };
   }
如何将新值添加到数组中,同时保留旧数组的值

编辑

我试着使用诺伦先生的功能:

        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)...
}

无论数组是否在另一个类中,都不能将其添加到数组中


使用
List
而不是
NameValue[]
,然后您可以使用
站点。添加(…)

您永远无法更改数组的大小。为此,您需要使用类似于
列表的内容

由于使用名称/值对,应该考虑使用<代码>字典< /> >


最后,如果您希望让不同的类对数组的内容做出贡献,那么这是不会发生的。

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

(警告:代码来自我的脑袋,未经测试)

类别也是如此


像其他人建议的那样,使用
List
Dictionary
将是更具流动性的选项。它们已经有了添加、删除、包含等功能—基本上就是您需要操作数组时所需的所有功能。

数组在适当的位置是不可变的,因此如果您调整它们的大小(使用任何方法),将导致创建不同的实例(这是VB.NET的
ReDim
中发生的情况,但它们会对您隐藏)

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


myArray
现在将有4个元素深。但是我认为这在类之间不起作用(我还没有尝试过)。

为什么要使用数组而不是像
List
这样的可变集合?如果要添加元素,数组不是合适的构造。正如@M.Babcock所建议的,实现
IList
的策略更合适。您希望从哪个类添加值?具体问题是什么?是不是太受保护了?你可能需要装饰与保护,内部或公共的静态空白添加。。。功能。哇,谢谢你们!那么,我如何使用你的函数呢
private void OK_单击(对象发送者,事件参数e){NameValue newSite=newnamevalue(textBox1.Text,textBox2.Text);addvaluetosite(newSite);Close();}
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;
}
string[] myArray = new string[] { "Hello", "World" };
myArray = myArray.Concat(new string[] { "Something", "new" };