C# 在C中传递具有不同类型的泛型参数列表#

C# 在C中传递具有不同类型的泛型参数列表#,c#,asp.net-core,C#,Asp.net Core,我不确定我想做的在C#中是否可行,但也许有人能引导我走向正确的方向 我试图创建一个执行不同SQL存储过程的通用函数。我想传递过程的名称、参数和回调函数,以便在建立连接后启动。 但我遇到的问题是,我无法获取各种类型的参数的通用数组。虽然SQLParam也是一个泛型类,但我必须在ExecuteSQL()函数中指定它的类型,该函数将所有参数的类型限制为一种类型 有没有办法绕过这个限制 public static class SQL<T> { async public static

我不确定我想做的在C#中是否可行,但也许有人能引导我走向正确的方向

我试图创建一个执行不同SQL存储过程的通用函数。我想传递过程的名称、参数和回调函数,以便在建立连接后启动。 但我遇到的问题是,我无法获取各种类型的参数的通用数组。虽然SQLParam也是一个泛型类,但我必须在ExecuteSQL()函数中指定它的类型,该函数将所有参数的类型限制为一种类型

有没有办法绕过这个限制

public static class SQL<T> {
    async public static Task<T> ExecuteSQL(string ProcName, List<SQLParam<...ONE TYPE...>> Params, Func<SqlCommand, T> callback)
    {
        using (SqlConnection sqlConnection = new SqlConnection(Utilities.Common.Configuration.GetValue<string>("ConnectionStrings:DefaultConnection")))
        {
            using (SqlCommand sqlCommand = new SqlCommand(ProcName) { CommandType = System.Data.CommandType.StoredProcedure, Connection = sqlConnection })
            {
                Params.ForEach(param => sqlCommand.Parameters.Add(new SqlParameter("@" + param.Name, param.Value)));


                sqlConnection.Open();

                return callback(sqlCommand);
            }
        }
    }
}

public class SQLParam<T> { 
    string Name { get; set; }
    T Value { get; set; }
}
公共静态类SQL{
异步公共静态任务ExecuteSQL(字符串ProcName、列表参数、Func回调)
{
使用(SqlConnection-SqlConnection=newsqlconnection(Utilities.Common.Configuration.GetValue(“ConnectionStrings:DefaultConnection”))
{
使用(SqlCommand SqlCommand=newsqlcommand(ProcName){CommandType=System.Data.CommandType.StoredProcedure,Connection=sqlConnection})
{
Params.ForEach(param=>sqlCommand.Parameters.Add(新的SqlParameter(“@”+param.Name,param.Value));
sqlConnection.Open();
返回回调(sqlCommand);
}
}
}
}
公共类SQLParam{
字符串名称{get;set;}
T值{get;set;}
}

不要使用泛型类型,而是使用
object
System.object
)。这也是
DbParameter
实例的
Value
属性的类型,以及继承的类型,如
SqlParameter
。不过,我会让这变得简单一点,让您的代码获取SqlParameter类型列表,而不是对象列表。然后将该列表直接传递给命令。这将允许更大的灵活性,如还指定db类型、长度,并在适用时设置DBNull.Value。这就回避了一个问题:当您已经有
SqlParameter
?不要使用泛型类型,而是使用
object
System.object
)时为什么需要此类。这也是
DbParameter
实例的
Value
属性的类型,以及继承的类型,如
SqlParameter
。不过,我会让这变得简单一点,让您的代码获取SqlParameter类型列表,而不是对象列表。然后将该列表直接传递给命令。这将允许更大的灵活性,例如还指定db类型、长度,并在适用时设置DBNull.Value。这就引出了一个问题:既然已经有了
SqlParameter
,为什么还需要这个类?