MicroSoft C#代码规范(Record)

JerryXia 发表于 , 阅读 (3,275)

一定请 将代表了读/写集合的属性或返回值声明为
Collection或其子类,将代表了只读集合的属性或返回值声明为ReadOnlyCollection或其子类。

您应该重新考虑对于 ArrayList 的使用,因为所有添加至其中的对象都被当做
System.Object ,当从ArrayList
取回值时,这些对象都会拆箱,并返回其真实的值类型。所以我们推荐您使用定制类型的集合,而不是ArrayList。比如,.NET
在System.Collection.Specialized命名空间内为String提供了强类型集合
StringCollection。

您应该
重新考虑对于Hashtable的使用。相反,您应该尝试其他字典类,例如StringDictionary,NameValueCollection,
HybridCollection。除非Hashtable 只存储少量值,最好不要使用Hashtable 。

您应该 在实现集合类型时,为其实现IEnumerable
接口,这样该集合便能用于LINQ to Objects。

一定不要 在同一个类型上同时实现 IEnumerator和
IEnumerable接口。同样,也不要同时实现非泛型接口IEnumerator 和
IEnumerable。所以,一个类型只能成为一个集合或者一个枚举器,而不可二者皆得。

一定不要 返回数组或集合的null引用。
空值数组或集合的含义在代码环境中很难被理解。比如,一个用户可能假定如下代码能够正常运行,所以应该返回一个空数组或集合,而不是null引用。

int[] arr = SomeOtherFunc();
foreach (int v in arr)
{
    ...
}

一定请为值类型实现 IEquatable接口。值类型的Object.Equals
方法会引起装箱操作。且因为使用了反射特性,所以其默认实现效率不高。IEquatable.Equals
较其有相当大的性能提升,且其实现可以不引发装箱操作。

添加新评论