c# - Object 但不是派生类的扩展方法
问题描述
可以为 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
已经是 astring
那么这是一个无操作,因为String.ToString
实现为return this
.
推荐阅读
- imagemagick - ImageMagick - 部分伽玛校正
- javascript - 获取下拉菜单值的日期时间并将其与文本框日期时间一起添加
- c# - 使用正则表达式验证 SQL 查询
- c# - 在 .NET C# 中忽略 64 位程序集中的 32 位第三方 dll 错误
- ios - 如何通过使用 Ionic1 在 iPhone/iPad 上点击下一个键进入下一个输入?
- mysql - 从现在到一周 MYSQL 从客户那里获得生日
- sql-server - 由于 SQL Server 嵌套循环运算符中的基数估计错误导致的性能问题
- sapui5 - 上传多个员工的集合
- laravel - 如何将查询构建器代码转换为 Eloquent?
- php - 使用会话进行基于角色的身份验证