我想从字符串中的arraylist中获取单个值

RAH*_*HUL 0 .net c# asp.net

public ArrayList ChequeACpayee(string Payee, DateTime Date)
{
    ArrayList arr = new ArrayList();
    try
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("ViewChequeforAcPayee", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlParameter p = new SqlParameter();
        p = cmd.Parameters.AddWithValue("@PayeeName", Payee);
        p = cmd.Parameters.AddWithValue("@Date", Date);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            ChequeInfo infoCheque = new ChequeInfo();

            infoCheque.AcPayee = dr["AcPayee"].ToString();

            arr.Add(infoCheque);
        }

        dr.Close();
        con.Close();
    }
    catch (Exception e)
    {
    }
    return arr;
}
ArrayList ArrAcpayee = ChequeAcPayee.ChequeACpayee (DDLPayee.SelectedItem.ToString(), BDPSelectDate.SelectedDate);
Run Code Online (Sandbox Code Playgroud)

如何从这个arraylist中获取单个值?该值必须转换为字符串.

Jon*_*eet 7

您可以使用索引器和强制转换:

string payee = (string) ArrAcpayee[0];
Run Code Online (Sandbox Code Playgroud)

但你应该先检查尺寸:

if (ArrAcpayee.Length != 1)
{
    // Create your own more appropriate exception
    throw new SomethingWentWrongException("Expected 1 payee entry; got "
                                          + ArrAcpayee.Length);
}
string payee = (string) ArrAcpayee[0];
Run Code Online (Sandbox Code Playgroud)

但是,我关注代码的其他方面:

  • 你有没有使用泛型的原因?您是否真的使用.NET 1.1,或者某些不支持的框架List<T>
  • 您是否曾预计该ChequeACpayee方法中会有多个结果?如果没有,那么该方法应返回一个字符串,如果没有一个结果则抛出
  • 捕捉异常并吞下它是一个非常糟糕的主意.难道你真的想继续下去,好像什么地方出错了无论发生什么情况
  • 您应该使用using语句来关闭数据库连接和数据读取器,而不是Close()手动调用.否则,如果抛出异常,您将泄漏连接.
  • 通常,参数是camelCased,而不是PascalCased.(局部变量在类外是不可见的,因此问题较少,但它们通常也是基于驼峰的.)