我认为这种检查特定类型是否覆盖 ToString 的方法有点脆弱。我们可以通过其他几种方式解决这个问题。
首先,如果需要字符串表示,您可以使用一种方法添加额外的混合接口,如 IObjectDescriptor:字符串 GetDescription。并且您可以要求每种类型都实现此功能(如果未实现类,则会引发异常)。
第二种方法(如果我们不想更改现有的代码库)是使用单独的帮助类,它将有一个方法:ConvertToString:
static class ToStringHelper
{
// We can use Generic method to prevent boxing
public string ConvertToString(object o)
{
var sb = new StringBuilder();
// using reflection to access all public properties, for example
return sb.ToString();
}
}
在这两种情况下,您与客户之间的意图和“合同”都会更加清晰。在第一种情况下,如果类型未实现特定接口,您将抛出异常,使用第二种方法,您将获得至少一致的行为。