让我们列出你发布优秀和最喜欢的extension methods的答案 .
要求是必须发布完整代码以及如何使用它的示例和说明 .
基于对该主题的高度关注,我在Codeplex上设置了一个名为extensionoverflow的开源项目 .
Please mark your answers with an acceptance to put the code in the Codeplex project.
Please post the full sourcecode and not a link.
Codeplex News:
24.08.2010 Codeplex页面现在在这里:http://extensionoverflow.codeplex.com/
11.11.2008 XmlSerialize / XmlDeserialize 现在是Implemented和Unit Tested .
11.11.2008仍有更多开发人员的空间 . ;-) Join NOW!
11.11.2008第三个贡献者加入ExtensionOverflow,欢迎来到BKristensen
11.11.2008 FormatWith 现在是Implemented和Unit Tested .
09.11.2008第二个贡献者加入ExtensionOverflow . 欢迎来到chakrit .
09.11.2008我们需要更多开发人员 . ;-)
09.11.2008 ThrowIfArgumentIsNull 现在Implemented和Unit Tested在Codeplex上 .
30 回答
处理尺寸的便捷方式:
允许我替换:
附:
我的MiscUtil项目中有各种扩展方法(那里有完整的源代码 - 我不打算在这里重复它) . 我的最爱,其中一些涉及其他类(如范围):
日期和时间 - 主要用于单元测试 . 不确定我是否会在制作中使用它们:)
范围和踩踏 - 非常感谢Marc Gravell为他的operator stuff做出这样的决定:
比较:
参数检查:
LINQ to XML应用于匿名类型(或具有适当属性的其他类型):
推LINQ - 在这里解释需要很长时间,但要搜索它 .
string.Format快捷方式:
例:
要快速复制粘贴,请转到here .
你不觉得输入
"some string".F("param")
而不是string.Format("some string", "param")
更自然吗?要获得更易读的名称,请尝试以下建议之一:
..
这些有用吗?
例:
扩展方法:
该方法适用于所有类型,并允许您将一系列项目作为参数添加到列表中 .
例:
一定要把它放在codeplex项目中 .
将对象序列化/反序列化为XML:
ForEach for IEnumerables
天真的例子:
很酷的例子:
注意:
这与
Select
不同,因为Select
期望你的函数返回一些东西,就像转换到另一个列表一样 .ForEach只允许您为每个项执行某些操作而无需任何转换/数据操作 .
我做了这个,所以我可以用更实用的风格编程,我很惊讶List有一个ForEach而IEnumerable没有 .
把它放在codeplex项目中
我的转换扩展程序允许您执行以下操作:
在这里,as posted on TheSoftwareJedi.com
您可以在失败时请求默认值(调用空白构造函数或“0”表示数字),指定“默认”值(我称之为“其他”),或者请求null(其中T:class) . 我还提供了两个静默异常模型,以及一个典型的TryParse模型,它返回一个指示所采取操作的bool,一个out参数保存新值 . 所以我们的代码可以做这样的事情
我无法让Nullable类型非常干净地滚动到整个事物中 . 在我扔掉毛巾之前,我试了大约20分钟 .
我有一个用于记录异常的扩展方法:
它像这样使用:
[抱歉发布两次;第二个更好的设计:-)]
用于将字符串解析为枚举 .
信用到Scott Dorman
---编辑Codeplex项目---
我问Scott Dorman是否会介意我们在Codeplex项目中发布他的代码 . 这是我从他那里得到的答复:
我发现这个非常有用:
您可以在CodePlex上使用它 .
DateTimeExtensions
例子:
gitorious.org/cadenza是我见过的一些最有用的扩展方法的完整库 .
这是我经常用于演示文稿格式的一个 .
这是罗马数字的来往 . 不经常使用,但可能很方便 . 用法:
来源:
对于Winform控件:
IsDesignTime用法:
SetDropdownWidth用法:
我忘了提及,随意在Codeplex上使用这些...
ThrowIfArgumentIsNull是一个很好的方法来做我们都应该做的空检查做 .
下面是使用它的方法,它适用于命名空间中的所有类或在其中使用命名空间的任何位置 .
It's ok to use this code on the CodePlex project.
移动到C#时我想念Visual Basic's With statement,所以这里是:
以下是如何在C#中使用它:
节省了很多打字!
比较这个:
放入codeplex项目
采用camelCaseWord或PascalCaseWord并将其“字形化”,即camelCaseWord => camel Case Word
我经常将它与Capitalize结合使用
用法示例
Free to use in codeplex project
我觉得这个很有帮助
它删除了调用代码中的空检查 . 你现在可以做
将double转换为使用指定区域性格式化的字符串:
例:
下面是一个extension method,它适应Rick Strahl's code(以及注释),以阻止您每次将其转换为字符串时猜测或读取字节数组或文本文件的字节顺序标记 .
该片段允许您简单地执行以下操作:
如果您发现任何错误,请添加评论 . 随意将其包含在Codeplex项目中 .
这是我刚刚创建的一个 .
它可以让你这样做:
哪个更流畅,(IMO)比这更容易阅读:
“请在接受将代码放入Codeplex项目时标记您的答案 . ”
为什么?这个网站上的所有东西都在CC-by-sa-2.5之下,所以只需将你的扩展溢出项目置于相同的许可下,你就可以自由使用它了 .
无论如何,这是一个String.Reverse函数,基于this question .
在从MySqlDataReader中提取值时,我厌倦了繁琐的空值检查,因此:
当然,这可以与任何SqlDataReader一起使用 .
对于如何做到这一点,我们都有一些好的评论,而且我有机会在不同的上下文中实现类似的东西,所以这是另一个版本:
令我恼火的是,LINQ给了我一个OrderBy,它接受一个实现IComparer作为参数的类,但不支持传入一个简单的匿名比较器函数 . 我纠正了这一点 .
这个类从比较器函数创建一个IComparer ...
...并且这些扩展方法在枚举上公开了我的新OrderBy重载 . 我怀疑它适用于LINQ to SQL,但它对于LINQ to Objects非常有用 .
如果你愿意,欢迎你把它放在codeplex上 .
这个适用于MVC,它增加了为每个
ViewPage
中可用的Html
变量生成<label />
标记的功能 . 希望它会对尝试开发类似扩展的其他人有用 .Use:
Output:
Code:
转过来:
......进入这个:
...使用此扩展方法:
更多ADO.NET扩展方法:DbExtensions