C# 如何在C中将对象列表转换为特定类型的数组#

C# 如何在C中将对象列表转换为特定类型的数组#,c#,C#,我们有第三方测试类,它有一个方法“Convert”,它只接受数据样本数组 public class Test{ public class DataSample{ public int testVar{get;set;} public int testVar2{get;set;} } //some methods public static List<someType> Convert(DataSample[] data) { //execute some steps }

我们有第三方测试类,它有一个方法“Convert”,它只接受数据样本数组

public class Test{
public class DataSample{

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

public static List<someType> Convert(DataSample[] data)
{
  //execute some steps 
}

}
我试图通过提供DataSample类型对象的数组来创建一个类并调用测试类的Convert方法。 如上所述,数据类型对象存储在col1字段中

Public class ImplementTest{

public void CallConvert(){
var inputs = new Test.DataSample[] { };
// get the data from DB in list
            List<object> InputList = 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())
                        {
                            InputList.Add(dr["col1"]);
                        }
                    }
                }
            }
             //remove null
            InputList.RemoveAll(x => x ==  DBNull.Value);

            //create an array of Test.DataSample type
             ??

          //call third party class
          var ourput = Test.Convert(inputs).ToArray();


}
}
公共类实现测试{
公共void CallConvert(){
var inputs=newtest.DataSample[]{};
//从列表中的数据库获取数据
List InputList=新列表();
使用(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[“col1]”);
}
}
}
}
//删除空值
RemoveAll(x=>x==DBNull.Value);
//创建Test.DataSample类型的数组
??
//呼叫第三方类
var ourput=Test.Convert(inputs.ToArray();
}
}
如何将InputList的所有对象传递给inputs数组,以便将其传递给仅接受DataSample类型数组的第三方方法Convert()

或者,在从存储过程获取对象时,是否有一种直接的方法可以创建DataSample类型的数组

有什么提示吗

谢谢

我们有一个存储过程,它给出以下输出

哇。。。那是。。。有趣(1)

无论你在这里做什么,都注定要失败。让数据库完成它们的工作并提供特定的值,例如两列,一列使用testVar,另一列使用testVar2。然后在代码中构建一个
新的TestData
,并分配这两个值

如果您不能更改数据库接口(在这种情况下,我强烈建议不要与为下一个项目设计的人一起工作),那么至少采取正则表达式,解析这两个值,然后在代码中自己创建该对象。p> 有两到三种不同的方法可以实现这一点,但都比实际情况复杂得多。从数据库中获取数据并从中构建对象是非常基本的,当已有的轮子可用时,不应该重新发明黑洞量子引擎反重力场


(1) (为了不违反新的CoC,我将保留它)

因此我猜这不起作用,因为您试图将字符串
“new Test.DataSample{testVar=24,testVar=11}”
添加到DataSample?@stuartd类型的数组中,是的。那么数据库中存储的文本就是一个表达式。。?当解析和调用时,应该会给你一个DataSample的实例?@Dave,是的。它存储在第三方中,我们只能运行SQL查询和procs。是的,我们没有可以更改它的访问级别。它是一个巨大的表,有数千条记录。我将通过解析方法进行检查。谢谢!
Public class ImplementTest{

public void CallConvert(){
var inputs = new Test.DataSample[] { };
// get the data from DB in list
            List<object> InputList = 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())
                        {
                            InputList.Add(dr["col1"]);
                        }
                    }
                }
            }
             //remove null
            InputList.RemoveAll(x => x ==  DBNull.Value);

            //create an array of Test.DataSample type
             ??

          //call third party class
          var ourput = Test.Convert(inputs).ToArray();


}
}