Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中创建具有对象相似类型列表的类型数组#_C# - Fatal编程技术网

C# 如何在C中创建具有对象相似类型列表的类型数组#

C# 如何在C中创建具有对象相似类型列表的类型数组#,c#,C#,我们有第三方类,它只接受对象数组 第三方类别: public class Test { public class Input { public int testVar { get; set; } public int testVar2 { get; set; } } //some methods public static List<someType> Convert(Input[] data) {

我们有第三方类,它只接受对象数组

第三方类别:

public class Test
{
    public class Input
    {

        public int testVar { get; set; }
        public int testVar2 { get; set; }
    }
    //some methods

    public static List<someType> Convert(Input[] data)
    {
        //execute some steps 
    }
}
我试图通过提供输入类型对象的数组来创建一个类并调用测试类的Convert方法

public class ImplementTest
{
    public void CallConvert()
    {
        // get the data from DB in list
        List<object> Input = new List<object>();
        using (SqlConnection con = new SqlConnection(conString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {

                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.CommandText = "dbo.ReadAll_Input";

                con.Open();

                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        Input.Add(dr["data"]);
                    }
                }
            }
        }

        //convert list object to input type object  
        var inputs = new Test.Input[]
        {
           //how to pass Input list efficiently
        };

        var output = Test.Convert(inputs).ToArray();
    }
}
公共类实现测试
{
公共void CallConvert()
{
//从列表中的数据库获取数据
列表输入=新列表();
使用(SqlConnection con=新的SqlConnection(consting))
{
使用(SqlCommand cmd=new SqlCommand())
{
cmd.CommandType=System.Data.CommandType.StoredProcess;
cmd.CommandText=“dbo.ReadAll_Input”;
con.Open();
使用(SqlDataReader dr=cmd.ExecuteReader())
{
while(dr.Read())
{
输入.添加(dr[“数据”]);
}
}
}
}
//将列表对象转换为输入类型对象
变量输入=新测试。输入[]
{
//如何有效地传递输入列表
};
var输出=Test.Convert(输入).ToArray();
}
}
有谁能帮我传递输入列表对象以高效地创建对象数组吗


谢谢

您可以使用映射器方法:

public Input MapRow(IDataRecord row)
{
    return new Input
    {
        Name = row["Name"].ToString(),
        Number = int.Parse(row["Number"].ToString())
    };
}
然后像这样使用它:

public void CallConvert()
{
    // get the data from DB in list
    List<Input> inputs = new List<Input>();

    using (SqlConnection con = new SqlConnection(conString))
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.CommandText = "dbo.ReadAll_Input";

            con.Open();

            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    inputs.Add(MapRow(dr));
                }
            }
        }
    }

    var output=Test.Convert(inputs.ToArray());
}
public void CallConvert()
{
//从列表中的数据库获取数据
列表输入=新列表();
使用(SqlConnection con=新的SqlConnection(consting))
{
使用(SqlCommand cmd=new SqlCommand())
{
cmd.CommandType=System.Data.CommandType.StoredProcess;
cmd.CommandText=“dbo.ReadAll_Input”;
con.Open();
使用(SqlDataReader dr=cmd.ExecuteReader())
{
while(dr.Read())
{
输入。添加(MapRow(dr));
}
}
}
}
var输出=Test.Convert(inputs.ToArray());
}

为了使其正常工作,存储过程应该返回一个输入表,在本例中有两列
(名称、编号)

为什么使用
列表输入
而不是
列表输入
?@Tigran,因为它可能包含空值,所以我需要过滤掉它们,而且我从DB中获取的数据包含输入类型create object结构。我们可以这样做吗?实际上,我们从数据库中获取的数据已经在对象初始化结构中。我认为这不会起作用。我会检查。谢谢!真糟糕!能否发布SP生成的数据结构,以查看其外观?我不确定你所说的
对象初始化结构是什么意思。我把它贴在了有问题的地方。数据行是这样的:“newtest.Input{testVar=12,testVar=19}”。我们有10万的记录。
public void CallConvert()
{
    // get the data from DB in list
    List<Input> inputs = new List<Input>();

    using (SqlConnection con = new SqlConnection(conString))
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.CommandText = "dbo.ReadAll_Input";

            con.Open();

            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    inputs.Add(MapRow(dr));
                }
            }
        }
    }

    var output=Test.Convert(inputs.ToArray());
}