【发布时间】:2017-01-07 14:38:39
【问题描述】:
public class Dog
{
public string Name { get; set;}
}
然后在这种情况下将 null 传递给 FeedDog()
public void FeedDog(Dog dog)
{
Console.WriteLine("Feeding "+dog.Name); // throws NullReferenceException
}
我该怎么做才能让它抛出DogDoesNotExistException而不这样做
public void FeedDog(Dog dog)
{
if (dog == null)
throw new DogDoesNotExistException(); // want to get rid of this
Console.WriteLine("Feeding "+dog.Name);
}
所以当你这样做时
public void FeedDog(Dog dog)
{
Console.WriteLine("Feeding "+dog.Name); // throws DogDoesNotExistException
}
【问题讨论】:
-
GetDog应该抛出异常。 -
这是一个糟糕的设计。并非每个
NullReferenceException都应在此类中转换为DogDoesNotExistException。这很容易出错。你需要明确。你真的需要抛出异常吗?如果原因是异常冒泡并在不同的层上处理,那么可以,但为什么不使用 TryXXX 模式返回布尔值? -
对,我会更新我的问题
-
你不能这样做。你没有这种程度的控制。异常是在 CLR 的内部深处生成的。为了比较,他们只是试图帮助发现哪个变量在未来的 C# 版本中负责 NRE
-
@Damien_The_Unbeliever 如果您在下面回答,我可以接受您的回答