空军

skyiv studio

导航

C#中更改1维数组的大小

模拟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  );

posted on 2005-09-19 17:10  空军  阅读(2919)  评论(8编辑  收藏  举报