C#中的异常处理而不抛出它

时间:2017-01-06 11:54:21

标签: c# exception exception-handling

嘿大家我刚刚进入C#并且正在进行异常处理。我试图找到一种方法来触发我的自定义异常,而不实际抛出它。每次我想要错误处理时,写出新的“自定义异常”似乎很笨拙。随着throw行被注释掉,我的异常永远不会被触发,我知道这是因为我最初将对象设置为null但无法找到解决方法。

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);
        }

    }
}

}

3 个答案:

答案 0 :(得分:1)

我不认为你完全理解异常的概念(或者你的描述没有意义)。 一旦发生异常,您的代码将只会输入下面代码的后半部分。您没有抛出异常,同样您的代码也不会导致异常。看到没有异常发生,你不能手动抛出异常我看不出它应该进入catch语句的原因。整个想法是捕捉错误,有时你可能不得不抛出。

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

...即使这样也不会激活你的catch子句,因为尝试将无效字符串强制转换为int会产生与自定义PersonException不同的错误。

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);
}

答案 1 :(得分:0)

例外情况适用于特殊情况。您只需要ifswitch块来检查此人的姓名是否为"kim"

答案 2 :(得分: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);
        }

    }
}

...因此,只有在出现错误情况时抛出异常,而不是在某些情况下只 catch