在C#中创建arraylist的更一般方法是什么,如示例中的那样?

时间:2013-09-18 20:58:37

标签: c# arraylist generic-collections

目标:实现创建广告系列的更通用方法。

问题:我必须创建多个arraylists,每个arraylists都匹配一个唯一的结构,以便在Sql数据库中比较和更新表。本着DRY的精神,我试图找到一种更好的方法来创建每个数组。我使用的代码如下

示例代码:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Diagnostics;  
using System.Data;  
using System.Data.SqlClient;  
using System.Collections;  
using System.Configuration;  

public static void Users()
{
    String sql = "";

    try
    {

         conn.Open();

         sql = "SELECT" +
                   "database.dbo.table1.username," +
                   "database.dbo.table1.status"   +
               "FROM" +
                   "database.dbo.table1";
         SqlCommand cmd = new SqlCommand(sql, conn);

         SqlDataReader dr = cmd.ExecuteReader();

         while (dr.Read())
         {
              //structure below
              User structure_A = new User();

              structure_A.username = dr.GetValue(0).ToString();
              structure_A.status   = dr.GetValue(1).ToString();

              //added to arraylist
              arraylist_A.Add(structure_A);
          }

          dr.Close();
          conn.Close();
}

注意:可根据要求提供更多信息。提前感谢您的任何见解

2 个答案:

答案 0 :(得分:3)

您可以做的一件事是创建一个采用不同参数的通用方法。例如:

public static ArrayList LoadInfo<T>(string sql, Func<SqlDataReader, T> getItem) where T: new
{
    var list = new ArrayList();
    conn.Open();
    SqlCommand cmd = new SqlCommand(sql, conn);
    SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        list.Add(getItem(dr));
    }
    return list;
}

public static User LoadUser(SqlDataReader dr)
{
    User structure_A = new User();
    structure_A.username = dr.GetValue(0).ToString();
    structure_A.status   = dr.GetValue(1).ToString();
    return User;
}

现在,要调用它来加载用户,只需将SQL查询和LoadUser方法传递给它:

string usersQuery = "SELECT ....";  // select users query
ArrayList usersList = LoadInfo(usersQuery, LoadUser);

如果你需要加载一堆Fooby个对象,你可以创建一个Fooby查询和一个LoadFooby方法,它可以从数据行创建和填充Fooby。

我建议你考虑使用List而不是ArrayList

答案 1 :(得分:1)

您可以使用泛型来解决问题,并使用反射来找出结构的外观。但我建议改为查看实体框架。

首先在这里首先使用EF数据库:http://msdn.microsoft.com/en-us/data/jj200620