c#扩展方法奇思妙用变态篇二:封装 if/else、swith/case及while
2010-09-30 20:46:12 来源:WEB开发网对引用类型我们可以使用Action<T>,也以使用链式编程的方式将多个If串起来。
但对值类型来说,就要用Func<T, T>了,每次返回一个新的值 :
public static T If<T>(this T t, Predicate<T> predicate, Func<T, T> func) where T : struct
{
return predicate(t) ? func(t) : t;
}
调用代码也要修改:
public static void Test2()
{
//扩展方式
int int0 = -121;
int int1 = int0.If(i => i < 0, i => -i)
.If(i => i > 100, i => i - 100)
.If(i => i % 2 == 1, i => i - 1);
//常规方式
int int3 = -121;
if (int3 < 0) int3 = -int3;
if (int3 > 100) int3 -= 100;
if (int3 % 2 == 1) int3--;
}
引用类型及值类型的扩展我们已经完成,用string来测试一下吧,如下:
public static void Test3()
{
//从邮箱变换成主页
string email = "ldp615@163.com";
string page = email.If(s => s.Contains("@"), s => s.Substring(0, s.IndexOf("@")))
.If(s =>! s.StartsWith("www."), s => s = "www." + s)
.If(s =>! s.EndsWith(".com"), s => s += ".com");
}
- ››扩展Axis2框架,支持基于JVM的脚本语言
- ››扩展WebSphere Portal V6个性化功能
- ››扩展JavaScript的时候,千万要保留其原来的所有功...
- ››扩展数据:如何为 Model 750 服务器选择 I/O 扩展...
- ››扩展 JDT 实现自动代码注释与格式化
- ››扩展 secldap 的功能以验证多个数据源
- ››扩展 JUnit4 以促进测试驱动开发
- ››扩展 JUnit 测试并行程序
- ››扩展的ToolStripEx控件
- ››扩展 Eclipse 的 Java 开发工具
- ››扩展 Eclipse 辅助和规范开发流程
- ››扩展方法 DataTable 和List 相互转换
更多精彩
赞助商链接