【问题标题】:Getting number of ITEMS in an array C#获取数组 C# 中的项目数
【发布时间】:2013-12-05 09:02:50
【问题描述】:

我需要将一个字符串(从一个窗口(QueryBuilder))插入一个数组(另一个窗口(主))。

在 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"}

我做错了什么?

【问题讨论】:

  • 你初始化了吗?
  • 接缝尚未初始化。
  • 请添加堆栈跟踪?
  • 初始化后UserBuiltQueries[itemsInUserBuiltQueries - 1]?
  • @AnoushkaSeechurn 错误在哪一行?

标签: c# arrays function parameters count


【解决方案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】:

    对于 UserBuildQueries,不要使用 string[],而是使用 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);
      }
    }
    

    【讨论】:

      【解决方案3】:

      在 c# 中,但我认为在所有编程语言中索引都是从 0 开始的:

      因此,如果数组的长度或计数 =1,则索引为 0 array[0], array.lenght==1

      int itemsInUserBuiltQueries = UserBuiltQueries.Count()-1;
      UserBuiltQueries[itemsInUserBuiltQueries] = argFromQueryBuilder.ToString();
      

      并在使用之前仔细检查您的数组是否已初始化!

      【讨论】:

        猜你喜欢
        • 2012-02-26
        • 1970-01-01
        • 1970-01-01
        • 2021-04-01
        • 1970-01-01
        • 2017-03-27
        • 1970-01-01
        • 2010-12-31
        • 2015-07-11
        相关资源
        最近更新 更多