類比Visual Basic的ReDim語句,C#實現,僅支援1維數組。若不需要檢查參數的合法性,則只要最後4行程式就可以了。請大家討論一下,當傳入的數組不是1維時,是拋出RankException異常,還是拋出ArgumentException異常(可以指明參數名)為好。
1using System;
2
3static Array ReDim(Array array, int newLength)
4{
5 if (array == null)
6 {
7 throw new ArgumentNullException("array");
8 }
9 if (array.Rank != 1)
10 {
11 // throw new RankException("要求1維數組。");
12 throw new ArgumentException("要求1維數組。", "array");
13 }
14 if (newLength < 0)
15 {
16 throw new ArgumentOutOfRangeException("newLength", "要求非負數字。");
17 }
18 if (newLength == array.Length) return array;
19
20 Type type = array.GetType().GetElementType();
21 Array newArray = Array.CreateInstance(type, newLength);
22 Array.Copy(array, 0, newArray, 0, Math.Min(array.Length, newLength));
23 return newArray;
24}
看看以下3個建構函式也很有意思。不知是不是M$的疏忽,如此相似的3個異常,其建構函式的參數順序竟不一致,實在讓人無所適從。
1public ArgumentException (string message, string paramName);
2public ArgumentNullException (string paramName, string message );
3public ArgumentOutOfRangeException(string paramName, string message );