WEB开发网
开发学院软件开发C语言 c#扩展方法奇思妙用变态篇二:封装 if/else、swit... 阅读

c#扩展方法奇思妙用变态篇二:封装 if/else、swith/case及while

 2010-09-30 20:46:12 来源:WEB开发网   
核心提示: 但编译不通过,会提示错误:这个错误比较怪,c#扩展方法奇思妙用变态篇二:封装 if/else、swith/case及while(4),我们写了两个扩展,一个是给值类型的,参数也等效(数量、顺序相同),非泛版扩展要比泛型版扩展优先级高,一个给引用类型,可string类型在这里都不行

但编译不通过,会提示错误:

c#扩展方法奇思妙用变态篇二:封装 if/else、swith/case及while

这个错误比较怪,我们写了两个扩展,一个是给值类型的,一个给引用类型,可string类型在这里都不行。这个原因我说不清楚了,还留给园子里高手们吧。

不过专门为string写个扩展,这个问题可以化解,如下:

        public static string If(this string s, Predicate<string> predicate, Func<string, string> func)
        {
            return predicate(s) ? func(s) : s;
        }

看来扩展方法也是有优先级的:对同一个类进行多次扩展,扩展方法相名,参数也等效(数量、顺序相同),非泛版扩展要比泛型版扩展优先级高。

下面再来看一段swith代码,很啰嗦的!这里是为了引出扩展硬写出来的:

        public static void Test4()
        {
            string englishName = "apple";
            string chineseName = string.Empty;
            switch (englishName)
            {
                case "apple":
                    chineseName = "苹果";
                    return;
                case "orange":
                    chineseName = "桔子";
                    return;
                case "banana":
                    chineseName = "香蕉";
                    return;
                case "pear":
                    chineseName = "梨";
                    break;
                default:
                    chineseName = "未知";
                    break;
            }
            Console.WriteLine(chineseName);
        }

上一页  1 2 3 4 5 6  下一页

Tags:扩展 方法 奇思

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接