繁体   English   中英

C#字符串到变量

[英]c# string to variable

我想使用string作为变量( string + int = variable )

public DataTable Add_new(string t1,string t2,string t3,string t4,
                         string t5,string t6,string t7,string t8,
                         string t9,string t10)
    {
        OleDbParameter[] param = new OleDbParameter[10];

        for (int i = 1; i < 11; i++)
        {
            param[i-1] = new OleDbParameter(""+i+"", OleDbType.VarChar);
            param[i-1].Value = ("t"+i);
        }
        DataTable dt = new DataTable();
        dt = DAL.selectdata("Add_Code", param);
        return dt;
    }

您可以将值放入数组中,然后可以通过索引访问它们:

public DataTable Add_new(string t1,string t2,string t3,string t4,string t5,string t6,string t7,string t8,string t9,string t10) {
  string[] t = { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10 };

  OleDbParameter[] param = new OleDbParameter[10];

  for (int i = 1; i < 11; i++) {
    param[i-1] = new OleDbParameter(i.ToString(), OleDbType.VarChar);
    param[i-1].Value = (t[i - 1]);
  }
  DataTable dt = new DataTable();
  dt = DAL.selectdata("Add_Code", param);
  return dt;
}

另一种方法是将参数转换为params数组。 您可以用相同的方式调用它,但是它到达时是一个数组:

public DataTable Add_new(params string[] t) {
  if (t.Length != 10) throw new ArgumentsException("The method should be called with 10 parameters.");

  OleDbParameter[] param = new OleDbParameter[10];

  for (int i = 1; i < 11; i++) {
    param[i-1] = new OleDbParameter(i.ToString(), OleDbType.VarChar);
    param[i-1].Value = (t[i - 1]);
  }
  DataTable dt = new DataTable();
  dt = DAL.selectdata("Add_Code", param);
  return dt;
}

注意:您发送到方法中的那些值可能具有某些含义。 您应该考虑为参数使用有意义的名称,也许只需编写用于创建十个参数的代码即可。 进行循环很方便,但是维护起来并不容易。

为什么不通过:

List<String> T;

代替

string t1,string t2,string t3,string t4,string t5,string t6,string t7,string t8,string t9,string t10

接着:

for (int i = 1; i < 11; i++)
{
     param[i-1] = new OleDbParameter(""+i+"", OleDbType.VarChar);
     param[i-1].Value = (T[i-1]);
}

所以会的

public DataTable Add_new(List<String> T) {

  OleDbParameter[] param = new OleDbParameter[10];

  for (int i = 1; i < 11; i++) {
    param[i-1] = new OleDbParameter(i.ToString(), OleDbType.VarChar);
    param[i-1].Value = (T[i-1]);
  }
  DataTable dt = new DataTable();
  dt = DAL.selectdata("Add_Code", param);
  return dt;
}

您的实现没有任何意义。 无论如何,以下将满足您的要求。

public DataTable Add_new(string t1, string t2, string t3, string t4,
                         string t5, string t6, string t7, string t8,
                         string t9, string t10)
        {
            OleDbParameter[] param = new OleDbParameter[10];
        for (int i = 1; i < 11; i++)
        {
            param[i - 1] = new OleDbParameter("" + i + "", OleDbType.VarChar);

            switch("t" + i)
            {
                case "t1":
                    param[i - 1].Value = t1;
                    break;
                case "t2":
                    param[i - 1].Value = t2;
                    break;
               //Recreate up to t10
            }
        }
        DataTable dt = new DataTable();
        dt = DAL.selectdata("Add_Code", param);
        return dt;
    }

尝试这个

public DataTable Add_new(params string[] t)
{
    OleDbParameter[] param = new OleDbParameter[10];

    for (int i = 0; i <= 10; i++)
    {
        var paramName = String.Format("t{0}", i+1);
        param[i] = new OleDbParameter(paramName, OleDbType.VarChar);
        param[i].Value = (t[i]);
    }
    DataTable dt = new DataTable();
    dt = DAL.selectdata("Add_Code", param);
    return dt;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM