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());
}