ArrayList類的ToArray()使用注意點

ArrayList類有個ToArray方法,用來將ArrayList的元素複製到新Object數組中,這裏有講究的地方!
使用ArrayList類的ToArray方法時並未指定任何參數,則無參數的ToArray方法將會返回一個類型爲Object的數組,而且你不可以將此Object數組轉換成您所需的類型的數組。例如,假設您將一個Customer對象加入至一個ArrayList中,則其源列表將不會被製作成一個Customer數組。這將使得以下的語句會執行失敗並返回一個System.InvalidCastException異常:
Customer[] custArray = (Customer[]) myArrayList.ToArray();
要想返回一個強類型數組,必須使用ToArray方法的另外一個重載版本,也就是會接收一個對象類型作爲其參數的重載版本。比方說,如果將之前的轉換語句改寫如下,將能夠成功執行:
Customer[] custArray = (Customer[]) myArrayList.ToArray(typeof(Customer));
但是請注意,上述的轉換必須在ArrayList的所有元素都是相同類型的時候纔會成功。如果您嘗試使用ToArray方法將一個含有不同類型對象的

ArrayList轉換成特定的類型,將會失敗。
下面的代碼片斷是個具體實例:
public Role[] GetRoles(int BlogID)
{
    System.Collections.ArrayList al=new System.Collections.ArrayList();
    IDataReader reader=DbProvider.Instance().GetRoles(BlogID);
    try
      {
       while(reader.Read())
       {
         Role role=new Role();
         if(reader["RoleID"]!=DBNull.Value)
         {
           role.RoleID=(int)reader["RoleID"];
         }
         if(reader["Name"]!=DBNull.Value)
         {
           role.Name=(string)reader["Name"];
         }
         al.Add(role);
      }
     }
    finally
    {
     reader.Close();
    }
    return (Role[])al.ToArray(typeof(Role));
}
注意:
typeof(Role)返回的是類Role的數據類型的信息,很豐富的,包括Name(數據類型名)、FullName(數據類型的完全限定名,包括命名空間名)、Namespace(定義數據類型的命名空間名) 、IsAbstract(指示該類型是否是抽象類型)、IsArray(指示該類型是否是數組)、IsClass(指示該類型是否是類)、IsEnum(指示該類型是否是枚舉)、IsInterface(指示該類型是否是接口) 、IsPublic(指示該類型是否是公有的)、IsSealed(指示該類型是否是密封類)、IsValueType(指示該類型是否是值類型)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章