嘿大家我刚刚进入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);
}
}
}
}
答案 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)
例外情况适用于特殊情况。您只需要if
或switch
块来检查此人的姓名是否为"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 。