2017-01-06 1 views
0

皆さん、私はちょうどC#に入っていて、例外処理を行っています。私は実際にそれを投げることなく私のカスタム例外をトリガする方法を見つけることを試みています。エラーを処理するたびに、新しい「カスタム例外」をスローするように記述するのは難しいようです。 throw行をコメントアウトして例外が発生することはありません。元々nullに設定していますが、これを回避する方法が見つからないためです。例外処理をC#で投げずに

public class Person 
{ 
    public Person(String name) 
    { 
     Name = name; 
    } 
    public String Name { get; set; } 
} 

public class PersonException : Exception 
{ 
    public PersonException() : base() {} 

} 


public class Program 
{ 

    static void Main(string[] args) 
    { 
     Person p = null; 
     try 
     { 
      p = new Person("kim"); 
      //throw new PersonException(); 
     } 
     catch (PersonException z) when(p.Name == "kim") 
     { 
      Console.WriteLine(z.Message); 
     } 

    } 
} 

}

+8

_実際にスローすることなくカスタム例外をトリガする_スローすることなく例外をトリガする方法はありません –

+2

達成しようとしていることは何ですか?エクスプレッションは、何かが期待どおりに動作しないときにスローされる_meant_です。 'string'パラメータがnullかそれ以外のものなど何かがうまくいかないときに例外をスローします。 – raymai97

+3

通常の制御フローに例外処理を使用しないでください。 'if ... else'を使用してください。例外は、しばしばバグを示す(まれな)例外的なケースで使用されることを意図しています –

答えて

0

例外は、例外的な状況のためのものです。その人の名前が"kim"かどうかを確認するには、ifまたはswitchブロックが必要です。

1

例外の概念を完全に理解しているとは思いません(または説明が意味をなさない)。 例外が発生すると、コードは後でコードの後半部分にのみ入力されます。あなたは例外をスローしていませんし、同様にあなたのコードは例外を引き起こさないでしょう。例外が発生していないことを確認して、手動で例外をスローしていない場合、catchステートメントを入力する必要はありません。全体のアイデアは、ときどき投げなければならないかもしれないエラーをキャッチすることです。

try { 
    // your code here 
} 
catch (Exception ex) { 
// here we catch a generic exception 
} 

...無効な文字列をint型にキャストしようとすると、カスタムPersonExceptionと異なるエラーが発生するため、catch節はアクティブ化されません。

public class Person 
{ 
    public Person(String name) 
    { 
     Name = name; 
    } 
    public String Name { get; set; } 
    public int Age { get; set; } 
} 


try 
{ 
    p = new Person("kim"); 
    p.Age = Convert.ToInt32("NOT AN INT"); 
} 
catch (PersonException z) when(p.Name == "kim") 
{ 
    Console.WriteLine(z.Message); 
} 
0

すでに他の人が言った事のすべて適用し、良いアドバイスであり、私はそれらを繰り返すことはしませんが、私はあなたが何をしようとしていることは、より良いように表現されていることを考える:

public class Program 
{ 
    static void Main(string[] args) 
    { 
     Person p = null; 
     try 
     { 
      p = new Person("kim"); 

      if(p.Name == "kim") 
      { 
       throw new PersonException(); 
      } 
     } 
     catch (PersonException z) 
     { 
      Console.WriteLine(z.Message); 
     } 

    } 
} 

...だから例外をスローするのではなく、特定の状況でをキャッチとするだけです。