我正在尝试将用户在单独的窗体上输入的新值添加到以下数组中:
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)...
}
答案 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个元素。我不认为这会在课程之间起作用(尽管没有尝试过)。