C# 泛型实例化

标签 c# generics

所有,我有一个返回列表的方法。此方法用于根据名称返回 SQL StoredProcedures、Views 和 Functions 的参数。我想要做的是创建一个对象列表并将该列表返回给调用者。方法如下

private List<T> GetInputParameters<T>(string spFunViewName)
{
    string strSql = String.Format(
        "SELECT PARAMETER_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.PARAMETERS " +
        "WHERE SPECIFIC_NAME = '{0}' AND PARAMETER_MODE = 'IN';",
        spFunViewName);
    List<string[]> paramInfoList = new List<string[]>();
    DataTable paramDt = Utilities.DTFromDB(conn, "InputParmaters", strSql);
    if (paramDt != null)
    {
        Converter<DataRow, string[]> rowConverter =
            new Converter<DataRow, string[]>(Utilities.RowColConvert);
        paramInfoList = Utilities.ConvertRowsToList<string[]>(paramDt, rowConverter);
    }
    else
        return null;

    // Build the input parameter list.
    List<T> paramList = new List<T>();
    foreach (string[] paramInfo in paramInfoList)
    {
        T t = new T(paramInfo[NAME], paramInfo[TYPE], Convert.ToInt32(paramInfo[CHARMAXLEN]));
        columnList.Add(column);
    }
    return columnList;   
}

很清楚无法通过new 实例化T 并传递给构造函数,但应该清楚我正在尝试做什么.有没有一种方法可以在不使用另外三种方法的情况下完成我想做的事情?

注意。主要问题是我传递给 T 的参数数量可以是两个三个。

感谢您的宝贵时间。

编辑:我使用的struct如下

public struct Database
{
    public string name { get; set; }
    public string filename { get; set; }
    public List<Table> tables { get; set; }
    public List<StoredProcedure> sps { get; set; }
    public List<Function> funcs { get; set; }
    public List<View> views { get; set; }
    public Database(string name, string filename)
    {
        this.name = name;
        this.filename = filename;
    }
}

protected internal struct StoredProcedure
{
    public string name { get; set; }
    public List<string[]> parameters { get; set; }
    public StoredProcedure(string name, List<string[]> parameters)
    {
        this.name = name;
        this.parameters = parameters;
    }
}

protected internal struct Function
{
    public string name { get; set; }
    public string output { get; set; }
    public List<string[]> parameters { get; set; }
    public Function(string name, string output, List<string[]> parameters)
    {
        this.name = name;
        this.output = output;
        this.parameters = parameters;
    }
}

protected internal struct View
{
    public string name {get; set;} 
    public List<string[]> parameters { get; set; }
    public View(string name, List<string[]> parameters)
    {
        this.name = name;
        this.parameters = parameters;
    }
}

最佳答案

使用Activator类创建T并传递参数。

Type type = typeof(T);
var result = (T)Activator.CreateInstance(type, new object[] { yourParameters });

在您的代码片段中使用:

T t = Activator.CreateInstance(type, colInfo[NAME], colInfo[TYPE], Convert.ToInt32(colInfo[CHARMAXLEN]));

关于C# 泛型实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11143781/

相关文章:

c# - GetCountry 查询中的 SQL 语法错误

c# - .NET 分析器 : Package Version vs Assembly Version

java - Java 中的泛型 : How do I make this example work?

java - Java中未绑定(bind)通配符泛型的用途和要点是什么?

c# - 有没有一种方法可以使用对象的形状而不是继承来对通用函数参数进行类型检查?

c# - 如何避免大型多步骤单元测试?

c# - WPF DataGrid 未使用绑定(bind)的 BindingList 进行更新

c# - Web API 2.0 - 使用 JavaScriptConverter 自定义日期格式

java - 在 Java 中使用泛型类型和 String.format

java - 任何类型泛型构造的枚举类