我听说从属性getter抛出异常是不合适的,我理解这一原理背后的原因。然而,以下情况让我感到困惑:想象一下,你正在写一个旨在适应几个不同平台的门面:
public interface IFacade
{
int SomeProperty { get; set; }
}
现在假设平台X
和Y
本机支持SomeProperty
,但平台Z
不支持。从平台Z
的适配器中的getter抛出NotSupportedException
难道不是告诉用户在该平台的特定情况下不支持该功能的正确方式吗?
只要记录了此行为,就没有任何错误。如果您关心处理异常的必要性,可以引入SupportsSomeProperty
属性。然而,这可能会破坏接口。
由于您知道无法捕获异常(对此您无能为力,平台不受支持!),或者在捕获异常时进行处理,因此最好退出程序并显示一条错误消息,说明不支持当前平台。
异常通常用于可以捕获和处理的地方,或者在发生错误时意外抛出的地方。如果您发现程序在平台z
上运行的错误,如果无法继续,请退出程序。