如何在 C# 上定义像 StringBuilder.Appand() 这样的自定义函数

How to define custom function like StringBuilder.Appand() on C#

我想做一个像这样传递两个参数的函数

myClass mc=new myClass();
mc.values("string_col1","string_val1");
mc.values("string_col2","string_val2");

我正在单独 class 通过存储过程在数据库中插入值,我的功能是

public void sp_insert(string pro_name, string pro_val)
    {
        cnnction.Open();
        cm.CommandText = pro_name;
        cm.Connection = cnnction;
        cm.CommandType = CommandType.StoredProcedure;
        string[] name = pro_val.Split('|');
        for (int i = 0; i < name.Length; i++)
        {
            string[] var = name[i].Split(',');
            cm.Parameters.AddWithValue(var[0], var[1]);
        }
        cm.ExecuteNonQuery();
        cnnction.Close();
    }`

现在当我调用这个方法时我想要这个

sp_insert("procedure_name",mc);

以前我是这样工作的

sp_insert("procedure_name","@col1,value1|@col2,value2")

我知道这是最糟糕的作品@或|请帮忙

就像@Daniel 说的,你可以使用Dictionary

sp_insert 方法更改为:

public void sp_insert(string pro_name, Dictionary<string,string> pro_val)
{
    cnnction.Open();
    cm.CommandText = pro_name;
    cm.Connection = cnnction;
    cm.CommandType = CommandType.StoredProcedure;

    foreach (var item in pro_val)
    {
       cm.Parameters.AddWithValue(item.Key, item.Value);
    }
    cm.ExecuteNonQuery();
    cnnction.Close();
}

然后在您调用此方法的任何地方,将此字典传递给它

Dictionary<string,string> var = new Dictionary<string, string>();
var.Add("@param1","paramValue1");
var.Add("@param2", "paramValue2");

您可能正在寻找 params 关键字: https://msdn.microsoft.com/en-us/library/w5zay9db.aspx

public void sp_insert(string pro_name, params string[] pro_val)
{
    for (int i = 0; i < pro_val.Length; i++)
    {
        Console.Write(pro_val[i] + " ");
    }
   `enter code here`[...]
}

您可能还想创建一个 class 来包装这些值:

public class ColValueWrap
{
   public string Col { get; set;}
   public string Val { get; set; }

   public ColValueWrap(string col, string val) 
   {
      Col = col;
      Val = val;
   }
}

所以你可以这样使用它:

public void sp_insert(string pro_name, params ColValueWrap[] pro_vals)
{
   foreach (var val in pro_vals)
   {
        Console.WriteLine(val.Col + ":" + val.Val);
   }
   `enter more code here`[...]
}

sp_insert("procedure_name",new ColValueWrap("@col1", "val1"), new ColValueWrap("@col2", "val2"));