namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
ArrayList AL = new ArrayList();
Console.WriteLine("Capacity " + "Count");
Console.WriteLine(AL.Capacity+" "+AL.Count);
AL.Add(3);
Console.WriteLine(AL.Capacity+" "+AL.Count);
AL.Add(3);
AL.Add(3);
AL.Add(3);
AL.Add(3);
Console.WriteLine(AL.Capacity+" "+AL.Count);
Console.ReadKey();
}
}
}
这是实验结果:
可见资料是错误的。默认构造器,将会以0个容量来初始化动态数组。造成这一错误不知道是否跟C#3.0更新有关,如果有条件测试的朋友,帮忙试下在c#1.0 2.0下的情况。
然后当往动态数组添加一个内容时,数组的大小变为4。所以但我们只需要数组保存2个对象时,明确声明定义容量为2的动态数组,可以为我们节约一倍的容量,当对象足够大时,消耗是可观的。当动态数组填满时,容量会成倍增长。
这是文杰师兄的实验代码:
{
static void Main(string[] args)
{
ArrayList a = new ArrayList();
PrintDetail(a.Capacity, a.Count);
{
a.Clear();
for (int j = 0; j < i; j++)
{
a.Add(j);
}
}
}
{
Console.WriteLine(count + " elment in arraylist:");
Console.WriteLine("Capacity:" + capacity + " Count:" + count);
Console.WriteLine();
}
}
Capacity:0 Count:0
Capacity:4 Count:3
Capacity:8 Count:6
Capacity:16 Count:12
Capacity:32 Count:24
Capacity:64 Count:48
Capacity:128 Count:96
Capacity:256 Count:192
Capacity:512 Count:384
Capacity:1024 Count:768
Capacity:2048 Count:1536
Capacity:4096 Count:3072
Capacity:8192 Count:6144
Capacity:16384 Count:12288
Capacity:32768 Count:24576
Capacity:65536 Count:49152
Capacity:131072 Count:98304
Capacity:262144 Count:196608
Capacity:524288 Count:393216
Capacity:1048576 Count:786432
2.自定义异常
.NET的异常并不能满足我们的需要,所以有时在应用程序中,也可而已从基类中派生出自己的异常类。这样就可以捕捉或抛出特殊的异常类,使得处理异常更加合理。
派生异常要注意尽量不要从System.Exception派生,因为在System命名空间里,有2个基本异常类,分别是ApplicationExcepion和SystemException,他们都是派生自Exception,他们的用途也是不同的,ApplicationExcepion是可以用于编程者派生出自己的异常类,而SystemException则用于派生系统预定义的异常类,如数组越界IndexOutOfRangeException。
在MSDN中有提到这样的一句话“对于大多数应用程序,从 Exception 类派生自定义异常。最初要求自定义异常应该从 ApplicationException 类派生;但是在实践中并未发现这样有很大意义。”因为ApplicationException和SystemException都没有扩展异常基类的功能,只不过是为了区分系统预定义异常和用户自定义异常。
还要注意几点是:
异常类名称一定要以后缀 Exception 结尾。
应使异常可序列化。异常必须可序列化才能跨越应用程序域和远程处理边界正确工作。
这是MSDN里面标准的自定义异常:
public class NewException : BaseException, ISerializable
{
public NewException()
{
// Add implementation.
}
public NewException(string message)
{
// Add implementation.
}
public NewException(string message, Exception inner)
{
// Add implementation.
}
// This constructor is needed for serialization.
protected NewException(SerializationInfo info, StreamingContext context)
{
// Add implementation.
}
}
在使用var首先要注意在声明时一定要同时初始化变量,因为没有赋值,IDE就不能确定变量类型,而已不可以为空(null)。
var i = 10;
int i = 10;
这两个句子是等价的。
用var声明后,该变量是强类型的,下面的类型转换在编译时会报错。
var i = 10 ;
i = “test”;
当声明变量并赋值时,i 是整数型,将一个字符串赋值给整数显然是错误的。
var testArray = new []{1,2,3};
或者是相同的应用类或为空(null),既然是引用类型的数组,必然包括空值(null)。

浙公网安备 33010602011771号