2013-12-05 4 views
0

Мне нужно вставить строку (из одного окна (QueryBuilder)) в массив (из другого окна (Main)).Получение числа ITEMS в массиве C#

В главном у меня есть метод, как

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

Вы инициализировали? – techloverr

+0

Швы еще не инициализируются. – azisfatoni

+2

добавьте stacktrace? – giammin

ответ

1

Эти линии неправы

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

Массивы начинаются с нулевого индекса и end в index (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 уже является строкой и нет необходимости преобразовывать в строку

+0

Спасибо, решил мою проблему. –

0

В C#, но я думаю, во всех языках программирования indexis начинается с 0:

так что если массив имеет длину или считать = 1 индекс равен 0 массива [0], array.lenght == 1

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

И дважды проверьте, что ваш массив инициализирован, прежде чем использовать его!

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); 
    } 
} 
Смежные вопросы