最近我问了一个关于如何清理我认为丑陋代码的问题.一个建议是创建一个扩展方法,它将执行所需的功能并返回我想要的功能.我的第一个想法是'太棒了!Extensions有多酷......"但经过一番思考后,我开始对使用Extensions有了第二个想法......
我主要担心的是,Extensions似乎是一种自定义的"快捷方式",可以让其他开发人员难以遵循.我理解使用扩展可以帮助使代码语法更容易阅读,但是如何跟随幕后的声音呢?
以我之前的问题代码片段为例:
if (entry.Properties["something"].Value != null)
attribs.something = entry.Properties["something"].Value.ToString();
Run Code Online (Sandbox Code Playgroud)
现在用扩展名替换它:
public static class ObjectExtensions
{
public static string NullSafeToString(this object obj)
{
return obj != null ? obj.ToString() : String.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
并使用语法调用:
attribs.something = entry.Properties["something"].Value.NullSafeToString();
Run Code Online (Sandbox Code Playgroud)
定义一个方便的方法,但它真的值得另一个类对象的开销吗?如果有人想重用我的代码片段而不理解扩展,会发生什么?我可以像使用相同的结果一样轻松地使用语法:
attribs.something = (entry.Properties["something"].Value ?? string.Empty).ToString()
Run Code Online (Sandbox Code Playgroud)
所以我做了一些挖掘,发现了一些关于使用Extensions的优点/缺点的文章.对于那些倾向于看看以下链接的人:
我无法确定哪种方式更好.自定义扩展执行我想要他们做的事情或更多显示的代码来完成相同的任务?我真的很想学习"真正的"开发人员对这个主题的看法......