你最喜欢的C#扩展方法是什么?(codeplex.com/extensionoverflow)
你最喜欢的C#扩展方法是什么?(codeplex.com/extensionoverflow)
已锁定。该问题及其答案因为偏题但具有历史意义而被锁定。它目前不接受新的回答或交互。
让我们列出一个答案列表,您可以在其中发布您卓越且喜爱的扩展方法。
要求是必须发布完整的代码,以及如何使用它的示例和说明。
基于对此主题的高度关注,我设立了一个名为extensionoverflow的开源项目,位于Codeplex上。
请使用接受标记标记您的答案,以将代码放入Codeplex项目中。
请发布完整的源代码而不是链接。
Codeplex新闻:
2010年8月24日 Codeplex页面现在在这里:http://extensionoverflow.codeplex.com/
2008年11月11日 XmlSerialize / XmlDeserialize现已被实现和单元测试。
2008年11月11日,还有更多的开发者可以加入!;-) 现在就加入吧!
2008年11月11日,第三位贡献者加入了ExtensionOverflow,欢迎BKristensen
2008年11月11日,FormatWith已经实现并单元测试完成。
2008年11月09日,第二位贡献者加入了ExtensionOverflow,欢迎chakrit。
2008年11月09日,我们需要更多的开发者。;-)
2008年11月09日,ThrowIfArgumentIsNull已经在Codeplex上实现并单元测试完成。
我在我的MiscUtil项目中有各种扩展方法(完整源代码可在那里找到 - 我不会在这里重复)。我的一些喜爱的扩展方法,其中一些包括其他类(例如范围):
日期和时间处理 - 主要用于单元测试。不确定是否会在生产环境中使用:)
var birthday = 19.June(1976); var workingDay = 7.Hours() + 30.Minutes();
范围和步幅 - 非常感谢Marc Gravell提供的运算符支持,使这成为可能:
var evenNaturals = 2.To(int.MaxValue).Step(2); var daysSinceBirth = birthday.To(DateTime.Today).Step(1.Days());
比较:
var myComparer = ProjectionComparer.Create(Person p => p.Name); var next = myComparer.ThenBy(p => p.Age); var reversed = myComparer.Reverse();
参数检查:
x.ThrowIfNull("x");
将LINQ应用于匿名类型的XML - 或具有适当属性的其他类型:
//Jon 32 new { Name="Jon", Age=32}.ToXElements(); // Name="Jon" Age="32" (as XAttributes, obviously) new { Name="Jon", Age=32}.ToXAttributes()
推动LINQ - 在此解释太长,但可以搜索它。
public static bool In(this T source, params T[] list) { if(null==source) throw new ArgumentNullException("source"); return list.Contains(source); }
允许我替换:
if(reallyLongIntegerVariableName == 1 || reallyLongIntegerVariableName == 6 || reallyLongIntegerVariableName == 9 || reallyLongIntegerVariableName == 11) { // do something.... } and if(reallyLongStringVariableName == "string1" || reallyLongStringVariableName == "string2" || reallyLongStringVariableName == "string3") { // do something.... } and if(reallyLongMethodParameterName == SomeEnum.Value1 || reallyLongMethodParameterName == SomeEnum.Value2 || reallyLongMethodParameterName == SomeEnum.Value3 || reallyLongMethodParameterName == SomeEnum.Value4) { // do something.... }
为:
if(reallyLongIntegerVariableName.In(1,6,9,11)) { // do something.... } and if(reallyLongStringVariableName.In("string1","string2","string3")) { // do something.... } and if(reallyLongMethodParameterName.In(SomeEnum.Value1, SomeEnum.Value2, SomeEnum.Value3, SomeEnum.Value4) { // do something.... }