目的很简单:
构建一个SqlParameter类型的数组,用于给存储过程传入参数
传统做法:
SqlParameter[] param = 
{
//第一个SqlParameter,
//第二个SqlParameter,
//...........
};为了某种目的,必须将构建SqlParameter数组放入一个方法(函数)中执行,利用out类型参数,如下:protected void Button1_Click(object sender, EventArgs e)
    {
SqlParameter[] param = { }; string str = buildSQLQuery(a, out param,);
}
private string buildSQLQuery(string a, out SqlParameter[] param)
{
        ArrayList al = new ArrayList();

if(a="")
{
al.Add(第一个SqlParameter);
}
else if(a="1")
{
al.Add(第二个SqlParameter);
}
        for (int i = 0; i < al.Count; i++)
        {
            param[i] = (SqlParameter)al[i];
        } return 一个string;
}
执行之后。提示:使用了未赋值的 out 参数“param”
请问大家如何才能正确通过函数给SqlParameter数组赋值

解决方案 »

  1.   

    out的参数必须先赋值 new出来
    不想的话 可以用ref不过本身就是引用类型 不用加 out吧
      

  2.   

    你是说开始不知道大小  进去才能按ARRAYLIST得到大小吧
    那就用ref呗
      

  3.   

    按你的要求,你把Out改成Ref就可以了.
      

  4.   

    private string buildSQLQuery(string a, out SqlParameter[] param)
    改成
    private string buildSQLQuery(string a, out SqlParameter[] param)
    {
       ArrayList al = new ArrayList();

    if(a="")
    {
    al.Add(第一个SqlParameter);
    }
    else if(a="1")
    {
    al.Add(第二个SqlParameter);
    }        SqlParameter[] tmpParams = new SqlParameter[al.Count];        for (int i = 0; i < al.Count; i++)
            {
                tmpParams[i] = (SqlParameter)al[i];
            }
            param = tmpParams; return 一个string;}这样我想应该能行
      

  5.   

    out只是把方法里的值传出,而不会像ref一样直倿在方法体内对变量同地址操作,所以你的方法中直接把out改成ref,如下,其它的都不用改了:private string buildSQLQuery(string a, ref SqlParameter[] param)
    {
    ...
    }
      

  6.   

    在你的buildSQLQuery方法里的开头添加下面这一行
    SqlParameter[] param = new SqlParameter[int型数字];out的,要先声明。
      

  7.   

    别折腾了你想重写Parameter是么?》
    我告诉你你实现不了,还不如好好goolge一下别人些的
    呵呵