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