本帖最后由 boss_george 于 2014-10-30 18:04:23 编辑

解决方案 »

  1.   

    “扩展方法”可以用,也可以不用。在微软的传统的控件中一直就有类似机制,你把控件从工具箱上拖到实际页面时,在属性页上就总能看到2、3个在类型代码中没有定义的属性,这些就跟扩展方法有关。而Linq等等强大的可扩展框架系统,靠的就是扩展方法。因此扩展方法在很多地方都是提高框架的方便技巧。但是个别人不理解它,也是可以理解的。因为有些人就是觉得会整天“增删改查”就够了,不关心别的设计问题。但是我要说的是,你这个问题,“领导之前培训了什么吗?”。如果领导没有说过的,其实都可以做。如果有这样的管理风格的领导,才是好领导。如果遇到一个搞行政手腕的领导来“施压”来了,告诉你说“凡是没有说过可以做的,都是你的错”,那你就小心了。
      

  2.   

    扩展方法应该说不要在代码中大量使用,因为大量使用意味着你的代码设计出现了问题
    扩展方法主要是针对某一些类型来使用时较好,比如.net Framework中的IEnumerable接口的扩展
      

  3.   

    最终,下班后,领导指示:不要用XML序列化方法,而是每个类,自己写生成xml的代码。
    真搞不懂,宁可大量的复制粘贴代码,看上去津津有味的。诶。郁闷。
      

  4.   

    如果你用xml序列化,估计以后后悔有的吃了。版本更新 时,当你的类更改,重构时,当你对用户已经有的数据再反序列化时,那时候去死的心都有。
    写代码给自己看的,想怎么写都可以。但写代码给别人看时,最好你的写的代码是很多人都能看得懂的。
      

  5.   

    原来没用,不过这2天用了1次,感觉萌萌大...
     public static string ToHexString(this byte[] data)
            {
                return string.Join("-", data.AsParallel().Select(d => d.ToString("X2")).ToArray());
            }
     public static byte[] ToByte(this string s)
            {
                return s.Split('-').AsParallel().Select(x => Convert.ToByte(x, 16)).ToArray();
            }
    瞬间感觉高大上有木有???还是很不错的...虽然我不知道这样用对不对.......
      

  6.   

    乔尔丹诺.布鲁诺(GiordanoBruno,1548-1600),意大利思想家、自然科学家、哲学家和文学家。他勇敢的捍卫和发展了哥白尼的太阳中心说,并把它传遍欧洲,被世人誉为是反教会、反经院哲学的无畏战士,是捍卫真理的殉道者。由于批判经院哲学和神学,反对地心说,宣传日心说和宇宙观、宗教哲学,1592年被捕入狱,最后被宗教裁判所判为“异端”烧死在罗马鲜花广场。
      

  7.   

    不要用AsParallel,用AsEnumable。
      

  8.   


    如果没人回复就可以编辑.只要有人回复了 就不能编辑了...
    若若的问下 你知道AsParallel是什么意思不.......
      

  9.   


    使用AsEnumable无非就是想让他可以使用where或者select..但是数组本身就有了where,select方法啊..难道 int[] a = new int[1] { 1 };
     var b = a.AsEnumerable().First();
     var c=a.First();b就行 c就不行了??这又不是DataTable得需要
    DataTable dt = new DataTable();
    var q = dt.AsEnumerable().Where(d => d.Field<int>("age") > 8);
      

  10.   


    感谢你的回复
    但是呢,并不认可你所有回复
    1,2,你这毫无说服力,如果可能,详细描述一下?
    3.此处并不需要访问私有的,我做的设计,尽量都使用公开的属性。
    4.我已经按照领导的做法修改了程序了。
    a.不使用扩展方法,并很2的把生成的xml片段使用重写ToString的方式返回
    b.不使用xml序列化方法,而且不使用XmlDocument,而是自己拼接几行类似xml的标签行
    c.因为自创格式,所以无法用XmlDocument读取,只好自己用正则分析取回的数据
    d.原本统一的一个处理,完全可以自描述的格式,现在已经拆开,需要一堆的switch...case了,Oh,yeah,我以前自认为是设计师,经过这个领导的“洗礼”,我终于知道“码农”和“设计师”之间思想的鸿沟以及“码农”为什么被称之为“码农”了,我惊人的发现,这样垃圾的写法,其实代码行增加了至少10倍,如果按代码行算工资,我已经可以比以前多拿很多奖金了,原来按代码行算收入是这类人!懂了!
      

  11.   


    如果没人回复就可以编辑.只要有人回复了 就不能编辑了...
    若若的问下 你知道AsParallel是什么意思不.......谢告知
    如果允许(比如你的类是自己的代码有完全的控制权),最好还是不进行扩展,而在类内部实现。至于调用方便问题,你定义个接口让这6个类都实现就好了
      

  12.   


    使用AsEnumable无非就是想让他可以使用where或者select..但是数组本身就有了where,select方法啊..难道 int[] a = new int[1] { 1 };
     var b = a.AsEnumerable().First();
     var c=a.First();b就行 c就不行了??这又不是DataTable得需要
    DataTable dt = new DataTable();
    var q = dt.AsEnumerable().Where(d => d.Field<int>("age") > 8);

    啊没留意到……我表达的意思就是AsParallel要慎用吧。
      

  13.   


    感谢你的回复
    但是呢,并不认可你所有回复
    1,2,你这毫无说服力,如果可能,详细描述一下?
    3.此处并不需要访问私有的,我做的设计,尽量都使用公开的属性。
    4.我已经按照领导的做法修改了程序了。
    a.不使用扩展方法,并很2的把生成的xml片段使用重写ToString的方式返回
    b.不使用xml序列化方法,而且不使用XmlDocument,而是自己拼接几行类似xml的标签行
    c.因为自创格式,所以无法用XmlDocument读取,只好自己用正则分析取回的数据
    d.原本统一的一个处理,完全可以自描述的格式,现在已经拆开,需要一堆的switch...case了,Oh,yeah,我以前自认为是设计师,经过这个领导的“洗礼”,我终于知道“码农”和“设计师”之间思想的鸿沟以及“码农”为什么被称之为“码农”了,我惊人的发现,这样垃圾的写法,其实代码行增加了至少10倍,如果按代码行算工资,我已经可以比以前多拿很多奖金了,原来按代码行算收入是这类人!懂了!一般来说,在不能使用继承或者不能改写源码的情况下,才建议使用扩展方法。滥用扩展方法会给项目的扩展性,维护性和版本控制等方面造成不利影响。主要影响如下:
    扩展方法本身不能访问被扩展类的私有成员;
    扩展方法优先级低,所以会被被扩展类的同名方法覆盖;
    扩展方法不会被派生类继承,也不能重写;
    扩展方法有就近原则。如果在你的程序里有两个一模一样的扩展方法,和使用类处于同一命名空间里的扩展方法会被调用。具体的话,你要分析你的场景是否适合,是否会引起一些弊端。因为我们不清楚你的具体需求和代码。
      

  14.   

    你用switch...case, 如果这段代码刚好是变化的代码,这么写显然违反设计原则。