繁体   English   中英

对象但不是派生类的扩展方法

[英]Extension methods for Object but not derived classes

可以为Object创建扩展方法,但不能在任何派生类上使用它吗?

所需要的是一些通用实用程序,可将对象转换为处理常见异常的某些类型。 EJ。 将对象转换为字符串但将null更改为空字符串并修剪空白的方法。

object obj = ...
// I want to use de the method when the object is 'casted' as 'object':
string strValue = obj.ToStringTrim();
// But not be able to use it in any subclass. Ej. en this string:
strValue.ToStringTrim();

我知道这是一个棘手的语法糖,我想答案是肯定的,我应该为这种转换创建一个自定义实用程序类,但只是想知道是否有可能...

编辑

我知道这是反对继承的,但是我只想要一个hack,语法糖或其他任何东西……并且已经在C#中存在了;)。 而且,为什么这是一个问题? 好吧,这并不是真正的问题,但我不想让自动完成功能有那么大的膨胀

不,这是不可能的,因为继承不是这样的。 字符串是一个对象。 期! 但是为什么这是一个问题呢? 如果不需要,请不要将此扩展名与字符串一起使用。

但是,扩展方法可以实现为:

public static string ToStringTrim(this Object obj)
{
    return obj?.ToString().Trim() ?? "";
}

如果obj已经是一个string则这是一个空操作,因为String.ToString实现为return this

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM