我想创建一个返回我的类数组的方法,我知道如何处理arrayList但我需要填充'普通'数组[]。
我正在使用arrayList
public ArrayList GetListProductFamily()
{
ArrayList arrayProductFamily = new ArrayList();
IConnection conn = ConnUtil.GetConnection();
string query = GET_QUERY;
ProductFamily productFamily = new ProductFamily();
try
{
conn.ExecuteReader(query);
if (conn.DataReader.Read())
{
productFamily.cIdProductFamily = DB.LoadString(conn.DataReader, "CIDPRODUCTFAMILY");
productFamily.cProductFamily = DB.LoadString(conn.DataReader, "CPRODUCTFAMILY");
productFamily.lActive = Convert.ToInt32(DB.LoadInt(conn.DataReader, "LACTIVE"));
arrayProductFamily.Add(productFamily);
}
}
catch (Exception ex)
{
Logger.Error("Error", ex);
}
return arrayProductFamily;
}
答案 0 :(得分:1)
public ProductFamily[] GetListProductFamily()
{
List<ProductFamily> arrayProductFamily = List<ProductFamily>();
IConnection conn = ConnUtil.GetConnection();
string query = GET_QUERY;
try
{
var dataReader = conn.ExecuteReader(query);
while (dataReader.Read())
{
ProductFamily productFamily = new ProductFamily();
productFamily.cIdProductFamily = DB.LoadString(dataReader, "CIDPRODUCTFAMILY");
productFamily.cProductFamily = DB.LoadString(dataReader, "CPRODUCTFAMILY");
productFamily.lActive = Convert.ToInt32(DB.LoadInt(dataReader, "LACTIVE"));
arrayProductFamily.Add(productFamily);
}
}
catch (Exception ex)
{
Logger.Error("Error", ex);
}
return arrayProductFamily.ToArray();
}
非常简单,只需使用ArrayList
替换班级中的List<ProductFamily>
,然后返回列表的.ToArray()
。
自从引入泛型以来,ArrayList
的使用通常会被折旧,并且您应该尽可能地避免使用List<T>
强类型。
你也没有在阅读器中进行迭代,我不确定DB.LoadXXX
做了什么,但我假设它需要IDbDataReader
并加载指定的列名。这些内容可以替换为dataReader.GetInt32
或dataReader.GetString
,具体取决于您要阅读的内容。
还应该注意,您要检查DBNull
,否则您将提前抛出异常并退出。您可能希望在while循环中移动try / catch,以便一条记录不会导致读取器失败。
您还希望在using
循环中使用阅读器,但我会将其留给您实施。
答案 1 :(得分:0)
您可以通过以下方式更改代码来实现:
ExecuteReader
但这会让你有问题,因为上面的数组是固定长度的。您正在使用Array.Resize
,因此您无法计算记录总数。所以你需要动态地改变长度。您可以使用 while (dataReader.Read())
{
Array.Resize(ref arrayProductFamily , arrayProductFamily.Length+1);
.... rest of your code
}
执行此操作,您的代码可能会更改如下
{{1}}