在数组C#中获取ITEMS的数量

时间:2013-12-05 09:02:51

标签: c# arrays function parameters count

我需要将一个字符串(从一个窗口(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"}

我做错了什么?

3 个答案:

答案 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();

在使用之前仔细检查您的阵列是否已初始化!