感觉比较重要的需要注意的陷阱总结了下:
基础语言特性:
1.C#是强数据类型的,注意引用和值类型区别。
2.C#中提供的默认值和C++相反,C#中数据成员提供默认值,局部方法中不提供默认值。
.net字符串操作和内存管理:
3.string类型比较不能用==符号,而应该用Equals方法。
Console.WriteLine(s == "straße");
Console.WriteLine(s.Equals("straße"));
Console.WriteLine(s.Equals("straße", StringComparison.Ordinal));
Console.WriteLine(s.Equals("Straße", StringComparison.CurrentCulture));
Console.WriteLine(s.Equals("straße", StringComparison.OrdinalIgnoreCase));
// outputs True:
Console.WriteLine(s.Equals("straße", StringComparison.CurrentCulture));
Console.WriteLine(s.Equals("Straße", StringComparison.CurrentCultureIgnoreCase));
其实字符串还有不能频繁截取创建,这个时候应该要用BuilderString来做。
4.非托管堆资源的释放,例如文件描述符,数据库连接,网络连接等
需要考虑析构函数或Finalize方法,而且析构函数是会推迟执行的,所以需要继承IDisposable接口,实现Dispose()方法,对象超过生命期会马上释放。
保持这些资源使用状态会急剧耗尽系统的资源,削弱性能并且最终导致程序出错。
LINQ数据查询语言(底层对象多样)和数据结构(泛型优势):
5.LINQ对象类型不一样,会有不同的结果,比如是SQL的对象,XML对象,或者内存容器的对象。
6.正确使用容器类型,且用泛型类型的容器类型可以比非泛型的有更高的性能,因为避免了装箱和拆箱操作。
Array,ArrayList,BitArray,BitVector32,Dictionary<K,V>,HashTable,HybridDictionary,List<T>,NameValueCollection,OrderedDictionary,Queue, Queue<T>,SortedList,Stack, Stack<T>,StringCollection,StringDictionary.
原文见:http://www.toptal.com/c-sharp/top-10-mistakes-that-c-sharp-programmers-make
http://www.oschina.net/translate/top-10-mistakes-that-c-sharp-programmers-make