2014-05-09 2 views
-3

저는 http://www.homeandlearn.co.uk/csharp/csharp_s3p9.html을 통해 작업했으며 간단한 루프 곱셈 도구를 작성했으며 tryparse를 추가하여 공백으로 인한 충돌을 막으려했습니다.tryparse를 사용했지만 여전히 크래시가 발생했습니다

namespace WindowsFormsApplication4 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      int loopStart = int.Parse(textBox1.Text); 
      int loopEnd = int.Parse(textBox2.Text); 
      int multiply = int.Parse(textBox3.Text); 
      int answer = 0; 
      listBox1.Items.Clear(); 
      int firstNum = 0; 
      bool isNumber = int.TryParse(textBox1.Text, out firstNum); 

      if (!isNumber) 
      { 
       MessageBox.Show("bah"); 
      } 
      else    
      { 
       for (int i = loopStart; i <= loopEnd; i++) 
       { 
        answer = multiply * i; 
        listBox1.Items.Add(i + " times " + multiply + 
             " = " + answer.ToString()); 
       } 
      } 
     } 
    } 
} 

사람이 이유를 설명 할 수 있습니다 : 나는 다음과 같은 코드를 사용하여 첫 번째 상자를 비워두면

그러나, 나는 여전히 충돌을 얻을? 나는 여러 사이트 (bool 코드가 약간 다른 주된 이유)를 보았지만 제대로 작동하지 않는 것처럼 보입니다. 상자 1을 공백으로 남겨두고 다른 숫자 2에 숫자를 입력하는 경우입니다.

나는 아래 표를 볼 수 있습니다. - 이것이 처음으로 여기에 있고 초보자 인 이유가 확실하지 않습니다. 어쩌면 저의 질문입니다. 오히려 기본적인 것처럼 보입니다. 나는 불평하지 않고있다. 나는 내가 잘못한 것을 알기 위해 정성을 기울여서 미래에 실수를 되풀이하지 않도록 내가 몇 번이나 여기에있을 것이라고 확신한다.

답장을 보내 주셔서 감사합니다. 매우 도움이됩니다. 당신은 TryParse 사용하지 않는

답변

2

, 당신은 그들 각각의 결과를 확인 TryParse에 exception.Change에게 Parse 전화를 던지고 첫번째 TryParse 호출하기 전에 Parse 방법을 사용하고 있습니다.

int loopStart,loopEnd,multiply; 

if(int.TryParse(textBox1.Text, out loopStart) && 
    int.TryParse(textBox2.Text, out loopEnd) 
    int.TryParse(textBox3.Text, out multiply)) 
{ 
    // parsing successfull 
} 
+0

우수 - 충돌을 중단 한 것으로 보입니다. 나는 왜 그런지 알 수 없다. 나는 그것이 참된 숫자로 돌아 왔을 때해야할 일이 무엇인지 말하고있는 것을 이해합니다. 그러나 '유효한 숫자가 없으면 아무것도하지 못합니다 (즉, 실패하지 마십시오)'라고 말하는 것이 보이지 않습니다. – user3622151

0

여전히 빈처럼 int 아닌 뭔가 코드에서 Parse를 사용하고 있기 때문에 그것은 충돌?

제거 :

int loopStart = int.Parse(textBox1.Text) 

그리고 단지 모두가 말했듯이, 당신은 왜 그것의 파괴 인 TryParse 전에 Parse를 사용하는 TryParse

1

를 사용합니다. 너 TryParse이 뭔지 이해하고 있다고 생각하지 않는다. TryParse은 2-in-1 지름길입니다. 이렇게 :

int loopStart = 0; 
bool isLoopStartNumber = int.TryParse(textBox1.Text, out loopStart); 

은이 정확히 동일합니다 : 당신이 볼 수 있듯이

int loopStart = 0; 
bool isLoopStartNumber = false; 
try { 
    loopStart = int.Parse(textBox1.Text); 
    isLoopStartNumber = true; 
} catch { 
    isLoopStartNumber = false; 
} 

TryParse은 후자를 할 수있는 훨씬 깨끗하고 간단한 방법을 제공합니다. 두 줄의 코드 대 8 줄의 줄. 또한 TryParse은 실제 예외를 throw하는 것을 억제하므로 후자보다 빠릅니다.

+0

나는 너무 까다 롭지는 않지만 정확하게 일치하지는 않습니다. 기능적으로 동일합니다. TryParse 메서드는 실제로 예외를 throw하지 않습니다. 따라서 속도가 상당히 빨라집니다 (그리고 사용이 더 간단합니다). – KevinS

+0

@KevinS - 당신이 틀렸고 그것을 반영하기 위해 답을 수정했습니다. – Icemanind

관련 문제