欢迎各位探讨本问题,或者列出你认为C#做得不好,或者你认为C#应该具有的特性。如我一直觉得C#应该增加变量范围的特性,如定义一个int a;可以通过attribute或者其他方式在定义时指定a的取值范围,如 [Range(10,20)] int a; 表示a取值只能是10到20之间,如果赋值超过该范围则引发异常,当然用attribute的方式限制太多了,如果用int a :(10,20):;如此,两个冒号之间限制范围,对于字符串可以用正则表达式或者写字符串取值范围(类似枚举,但很多时候我们不需要枚举)。 等等,这个只是我实际项目中需要的,因为你会发现你每个函数,一大堆代码用来防止参数的各种异常了,如果可以省去那些代码,我们岂不是提高工作效率
[Range(10,20)]
int a;
表示a取值只能是10到20之间,如果赋值超过该范围则引发异常,当然用attribute的方式限制太多了,如果用int a :(10,20):;如此,两个冒号之间限制范围,对于字符串可以用正则表达式或者写字符串取值范围(类似枚举,但很多时候我们不需要枚举)。
等等,这个只是我实际项目中需要的,因为你会发现你每个函数,一大堆代码用来防止参数的各种异常了,如果可以省去那些代码,我们岂不是提高工作效率
attribute有限啊,他只能标记成员变量,如果是临时变量呢,如果是函数参数呢。
我知道啊,你也说了是语法糖嘛,本质上就是执行foreach,能节省3行代码(还包括两个正反括号)
我知道啊,你也说了是语法糖嘛,本质上就是执行foreach,能节省3行代码(还包括两个正反括号)配合上lamda就不是三行代码了。省很多的,而且代码可阅读性更高了。现在的问题是,ForEach不是IEnumareble的扩展方法,这个比较蛋疼。而且以前那一帮Collection的怪物无法转成泛型集合,除非我给他们每个都写一个扩展的转变方法,这个有些坑爹
/// <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)这样的写法了
恩,linq对于编程带来的简便简直逆天,让你可以少写代码,却还更加明白清楚。性能上也在可接受范围
用OfType<>或Cast<>就可以了。其中Cast转换所有记录,OfType则过滤出目标类型。
datatable.Rows.OfType<DataRow>().Select(...);另外,你AsEnumerable的实现不是好的流水线作业(不是按需处理,而是一次执行),最好不要用。
至于 datatable , 那是扩展方法, C# 的扩展方法真是让人大开眼界,让LINQ与原有类型完美结合.
C#不是不优雅,而是越来越强大.
用OfType<>或Cast<>就可以了。其中Cast转换所有记录,OfType则过滤出目标类型。
datatable.Rows.OfType<DataRow>().Select(...);另外,你AsEnumerable的实现不是好的流水线作业(不是按需处理,而是一次执行),最好不要用。这个我还真没试验过,我这就看看oftype,谢谢啊,总算等到有价值的回答了,谢谢啊
C#是很强大,除了为了安全让人有些郁闷,其他都很好,如果C#可以自己设定安全级别,如我设成最低,我就可以各种C的内存操作就好了,当然,有点痴人说梦了
C#是很强大,除了为了安全让人有些郁闷,其他都很好,如果C#可以自己设定安全级别,如我设成最低,我就可以各种C的内存操作就好了,当然,有点痴人说梦了
然后操作错误导致系统崩溃??
C#是很强大,除了为了安全让人有些郁闷,其他都很好,如果C#可以自己设定安全级别,如我设成最低,我就可以各种C的内存操作就好了,当然,有点痴人说梦了
然后操作错误导致系统崩溃??别怕崩溃,技术可以弥补一切
C#是很强大,除了为了安全让人有些郁闷,其他都很好,如果C#可以自己设定安全级别,如我设成最低,我就可以各种C的内存操作就好了,当然,有点痴人说梦了
然后操作错误导致系统崩溃??别怕崩溃,技术可以弥补一切
你是不怕,微软怕啊.由于用户使用他们的产品不当,导致用户操作系统崩溃,那安全性也太差了,
你是喜欢了,一般用户还敢用么,,,,,
所以,我极少用linQ的表达式,可能代码写多了,但很直关
我们平时也是,就是从数据库中查询出来显示,也不用前台筛选,也不用另外排序,也不用字符串匹配...
用linq干嘛?
我只是觉得C#貌似一开始没后面那么大的野心,可能一开始就知道盯着java,后来发现java都都抄完了,就开始关注各种脚本语言的优势