我需要将一个字符串(从一个窗口(QueryBuilder))插入一个数组(另一个窗口(Main))。
在Main我有一个方法
public void DisplayCalcQuery(string argFromQueryBuilder)
{
int itemsInUserBuiltQueries = UserBuiltQueries.Count();
UserBuiltQueries[itemsInUserBuiltQueries] = argFromQueryBuilder.ToString();
//displayng the user built query(queries) on the stack panel meant to display it.
foreach (string query in UserBuiltQueries)
{
CheckBox checkQueries = new CheckBox() { Content = query };
stackPanel1.Children.Add(checkQueries);
checkboxes.Add(checkQueries);
}
}
UserBuiltQueries
声明为
string[] UserBuiltQueries;
然而,当我从其他窗口开始时
backscreen.DisplayCalcQuery(ttextBox1.Text.ToString()); //where backscreen is the Main
参数传递得很好,但我得到一个错误
{"Value cannot be null.\r\nParameter name: source"}
我做错了什么?
答案 0 :(得分:1)
不使用UserBuildQueries的字符串[],而是使用List。当您需要它作为数组时,您可以简单地说:UserBuildQueries.ToArry()
将功能重写为
public void DisplayCalcQuery(string argFromQueryBuilder)
{
UserBuiltQueries.Add(argFromQueryBuilder.ToString());
//displayng the user built query(queries) on the stack panel meant to display it.
foreach (string query in UserBuiltQueries)
{
CheckBox checkQueries = new CheckBox() { Content = query };
stackPanel1.Children.Add(checkQueries);
checkboxes.Add(checkQueries);
}
}
答案 1 :(得分:1)
这些行错了
int itemsInUserBuiltQueries = UserBuiltQueries.Count();
UserBuiltQueries[itemsInUserBuiltQueries] = argFromQueryBuilder.ToString();
数组从索引0开始,以索引结束(Count - 1),因此,如果UserBuiltQueries.Count()
返回10,则可以使用0到9之间的索引。实际上,使用索引10,您将在外部添加新字符串数组的结尾。
但是,如果您的要求强制您扩展数组,那么如果使用List<string>
代码,则更好,更容易编码。添加新元素将更加容易,您仍然可以将List作为数组用于常见任务。
List<string> UserBuiltQueries = new List<string>();
.....
public void DisplayCalcQuery(string argFromQueryBuilder)
{
UserBuiltQueries.Add(argFromQueryBuilder);
//displayng the user built query(queries) on the stack panel meant to display it.
foreach (string query in UserBuiltQueries)
{
CheckBox checkQueries = new CheckBox() { Content = query };
stackPanel1.Children.Add(checkQueries);
checkboxes.Add(checkQueries);
}
}
顺便说一下,你应该停止不必要地将字符串转换为字符串。您传递的是ttextBox1.Text.ToString()
,但ttextBox1.Text
已经是一个字符串。在方法内部,参数argFromQueryBuilder
已经是一个字符串,无需转换为字符串
答案 2 :(得分:0)
在c#中但我认为在所有编程语言中,index都是从0开始:
所以如果数组的长度或count = 1,则索引为0 array [0],array.lenght == 1
int itemsInUserBuiltQueries = UserBuiltQueries.Count()-1;
UserBuiltQueries[itemsInUserBuiltQueries] = argFromQueryBuilder.ToString();
在使用之前仔细检查您的阵列是否已初始化!