2014-12-01 4 views
-1

Я пытаюсь преобразовать InputBox в Int32, но он не работает, кто-нибудь знает, как это решить?Преобразование InputBox

private void button1_Click(object sender, EventArgs e) 
{ 
    int[] tab = null; 
    for (int i = 0; i < numericUpDown1.Value; ++i) 
    { 
     tab[i] = Convert.ToInt32(Interaction.InputBox("Value", "Array")); 
     // Error here 
    } 
    textBox1.Text = "Plus petit: " + Smaller(tab).ToString();   
    //textBox1.Text = "Plus grand: " + result.ToString(); 
} 

private int Smaller(int[] array) 
{ 
    var result = array[0]; 
    foreach (int tabs in array) 
    { 
     if (result > tabs) 
     { 
      result = tabs; 
     } 
    } 
    return result; 
} 

Ошибка:

Object reference not set to an instance of an object. 
+1

Действительно ли «Interaction.InputBox» возвращает что-нибудь? –

+0

В какой строке происходит ваше исключение? –

+0

Нет, это не так. – user3813238

ответ

2

Вы не инициализирует свой массив. Изменить int[] tab = null; на int[] tab = new int[numericUpDown1.Value];

Если вы не инициализируете свой массив, он останется равным нулю и, следовательно, будет tab[i] всегда равным null. Значение в квадратных скобках будет указывать на массив компилятора, большой ваш массив.

Если вы не знаете, как большой массив будет, вы не хотите знать, или вы просто не волнует, вы можете захотеть использовать List<T>:

private void button1_Click(object sender, EventArgs e)  
{ 
    List<int> tab = new List<int>(); 
    for (int i = 0; i < numericUpDown1.Value; ++i) 
    { 
     tab.Add(Convert.ToInt32(Interaction.InputBox("Value", "Array"))); 
     // Error here 
    } 
    textBox1.Text = "Plus petit: " + Smaller(tab).ToString();   
    //textBox1.Text = "Plus grand: " + result.ToString(); 
} 

private int Smaller(List<int> list) 
{ 
    var result = list[0]; 
    foreach (int tabs in list) 
    { 
     if (result > tabs) 
     { 
      result = tabs; 
     } 
    } 
    return result; 
} 

// EDIT: Если вы хотите сэкономить некоторый код и просто хотите наименьшее Int значение из этого списка используйте

textBox1.Text = "Plus petit: " + tab.Min().ToString(); 
1

в button1_Click()tab равна нулю, так что вы не можете назначить tab[i]. Вы должны сначала сделать tab = new int[numericUpDown1.Value];