解决方案 »

  1.   

    欢迎各位探讨本问题,或者列出你认为C#做得不好,或者你认为C#应该具有的特性。如我一直觉得C#应该增加变量范围的特性,如定义一个int a;可以通过attribute或者其他方式在定义时指定a的取值范围,如
    [Range(10,20)]
    int a;
    表示a取值只能是10到20之间,如果赋值超过该范围则引发异常,当然用attribute的方式限制太多了,如果用int a :(10,20):;如此,两个冒号之间限制范围,对于字符串可以用正则表达式或者写字符串取值范围(类似枚举,但很多时候我们不需要枚举)。
    等等,这个只是我实际项目中需要的,因为你会发现你每个函数,一大堆代码用来防止参数的各种异常了,如果可以省去那些代码,我们岂不是提高工作效率
      

  2.   

    本帖最后由 bdmh 于 2014-06-23 14:37:24 编辑
      

  3.   


    attribute有限啊,他只能标记成员变量,如果是临时变量呢,如果是函数参数呢。
      

  4.   

    foreach是基本的循环语句啊,只要是一个集合都可以用foreach遍历,它并非针对某一类型的方法啊.就像for,while,do...while一样,基础的4种循环你不可能要求只有linq才能使用吧
      

  5.   

    我说的是linq的ForEach,不是基本循环那个。基本循环肯定可以用的了。list里面有一个方法ForEach(Action),本质来说就是个语法糖了,不过可以让我把十几行代码一行就写完了,而且意思还看起来特清楚
      

  6.   

    我说的是linq的ForEach,不是基本循环那个。基本循环肯定可以用的了。list里面有一个方法ForEach(Action),本质来说就是个语法糖了,不过可以让我把十几行代码一行就写完了,而且意思还看起来特清楚
    我知道啊,你也说了是语法糖嘛,本质上就是执行foreach,能节省3行代码(还包括两个正反括号)
      

  7.   

    我说的是linq的ForEach,不是基本循环那个。基本循环肯定可以用的了。list里面有一个方法ForEach(Action),本质来说就是个语法糖了,不过可以让我把十几行代码一行就写完了,而且意思还看起来特清楚
    我知道啊,你也说了是语法糖嘛,本质上就是执行foreach,能节省3行代码(还包括两个正反括号)配合上lamda就不是三行代码了。省很多的,而且代码可阅读性更高了。现在的问题是,ForEach不是IEnumareble的扩展方法,这个比较蛋疼。而且以前那一帮Collection的怪物无法转成泛型集合,除非我给他们每个都写一个扩展的转变方法,这个有些坑爹
      

  8.   

    目前我通过自己写一个扩展方法给那帮collection怪物用实现对linq方法的调用。
            /// <summary>
            /// 解决那一帮怪物Collection的linq问题
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="source"></param>
            /// <returns></returns>
            public static List<T> AsEnumerable<T>(this IEnumerable source)
            {
                List<T> res = new List<T>();
                foreach (T item in source)
                {
                    res.Add(item);
                }
                return res;
            }
    把这个扩展方法的封装放到System命名空间下去。这样,基本就可以可以直接MCollection.AsEnumerable<M>.Where(p=>true).Select(p=>1)这样的写法了
      

  9.   

    linq是微软以后发展的趋势,印象中MVC3的EF都是用linq语法的
      

  10.   


    恩,linq对于编程带来的简便简直逆天,让你可以少写代码,却还更加明白清楚。性能上也在可接受范围
      

  11.   


    用OfType<>或Cast<>就可以了。其中Cast转换所有记录,OfType则过滤出目标类型。
    datatable.Rows.OfType<DataRow>().Select(...);另外,你AsEnumerable的实现不是好的流水线作业(不是按需处理,而是一次执行),最好不要用。
      

  12.   

    楼主不要纠结,ForEach不像其他方法可以连接后续方法,所以没有必要与其他LINQ方法归到一起.
    至于 datatable , 那是扩展方法, C# 的扩展方法真是让人大开眼界,让LINQ与原有类型完美结合.
    C#不是不优雅,而是越来越强大.
      

  13.   


    用OfType<>或Cast<>就可以了。其中Cast转换所有记录,OfType则过滤出目标类型。
    datatable.Rows.OfType<DataRow>().Select(...);另外,你AsEnumerable的实现不是好的流水线作业(不是按需处理,而是一次执行),最好不要用。这个我还真没试验过,我这就看看oftype,谢谢啊,总算等到有价值的回答了,谢谢啊
      

  14.   


    C#是很强大,除了为了安全让人有些郁闷,其他都很好,如果C#可以自己设定安全级别,如我设成最低,我就可以各种C的内存操作就好了,当然,有点痴人说梦了
      

  15.   


    C#是很强大,除了为了安全让人有些郁闷,其他都很好,如果C#可以自己设定安全级别,如我设成最低,我就可以各种C的内存操作就好了,当然,有点痴人说梦了
    然后操作错误导致系统崩溃??
      

  16.   


    C#是很强大,除了为了安全让人有些郁闷,其他都很好,如果C#可以自己设定安全级别,如我设成最低,我就可以各种C的内存操作就好了,当然,有点痴人说梦了
    然后操作错误导致系统崩溃??别怕崩溃,技术可以弥补一切
      

  17.   


    C#是很强大,除了为了安全让人有些郁闷,其他都很好,如果C#可以自己设定安全级别,如我设成最低,我就可以各种C的内存操作就好了,当然,有点痴人说梦了
    然后操作错误导致系统崩溃??别怕崩溃,技术可以弥补一切
    你是不怕,微软怕啊.由于用户使用他们的产品不当,导致用户操作系统崩溃,那安全性也太差了,
    你是喜欢了,一般用户还敢用么,,,,,
      

  18.   

    linq  主要解决代码的复杂度,性能上出入不大,而其它表达式与之前的语法相差很大,很另类,
    所以,我极少用linQ的表达式,可能代码写多了,但很直关
      

  19.   

    平常写代码都没有用过linq,也没发现必然要用linq的地方呢?
      

  20.   

    说明你平时做的项目需求太简单.
    我们平时也是,就是从数据库中查询出来显示,也不用前台筛选,也不用另外排序,也不用字符串匹配...
    用linq干嘛?
      

  21.   

    大家别攻击linq啊,这个真的是好东西。3.5以及之后出的各种特性里面一堆都是炫瞎我双眼的节奏,很好的东西,包括那个dynamic,匿名类等等。哪怕一个action、function都是实际上节约N多代码的东西,看似简单没意思的东西,实际上却带来编码效率的大幅提升。
    我只是觉得C#貌似一开始没后面那么大的野心,可能一开始就知道盯着java,后来发现java都都抄完了,就开始关注各种脚本语言的优势