将对象列表转换为数组

时间:2018-03-23 11:28:12

标签: c# sql arrays list

我正在工作的地方我需要随机创建问题以便稍后使用它来创建问题文件,所以我所做的是创建表示问题的类Gene然后创建一个类型基因的列表QuestionList然后我通过循环创建基因的对象并将它们存储在列表QuestionList中,现在我需要将列表转换为数组s [],但我不能。任何人都可以帮忙吗?

这是我在外部类

中定义的代码,类和列表
public class Gene
{
    public string question { get; set; }
    public string CLO { get; set; }
    public string type { get; set; }
    public Gene(string s, string t, string i)
    {
        this.question = s;
        this.type = t;
        this.CLO = i;
    }
  }
List<Gene> QuestionList = new List<Gene>();

然后创建对象的循环,该对象位于与sql连接的函数中

string s = "select * Question, CLO, Question_Type FROM QuestionBank WHERE (Subject = '" + sub + "') AND (chapter = '" + chapter + "') AND (Question_Type = '" + qt.name + "') ORDER BY RAND() LIMIT = '" + qt.numOfType;
                    SqlCommand cmd = new SqlCommand(s, con);
                    SqlDataReader dr;
                    con.Open();
                    dr = cmd.ExecuteReader();
                    dr.Read();
                    while (dr.Read())
                    {
                        string ques = dr["Question"].ToString();
                        string questype = dr["Question_Type"].ToString();
                        string quesCLO = dr["CLO"].ToString(); 
                        QuestionList.Add(new Gene (ques, questype, quesCLO));
                    }
                     con.Close();
                   }

现在我需要将列表转换为数组

 string[] s = QestionList.ToArray();

我也试试

 Gene[] s = QestionList.ToArray();

但它们都不起作用,它向我显示错误消息“字段初始化程序无法引用非静态字段方法或属性”?

3 个答案:

答案 0 :(得分:1)

  

字段初始值设定项不能引用非静态字段方法或   属性

问题是您有一个引用非静态字段,方法或属性的字段初始值设定项。 C#编译器赢了allow that

一种解决方案是从/opt/keycloak/bin/kcadm.sh create users -s username=admin111 -s enabled=true -r master -s "attributes.tenantId=value" -s "attributes.ugId=ugId" -s "attributes.appId=app" 转移到field

property

上面的缺点是,无论何时访问Gene[] s { get { return QestionList.ToArray(); } } ,您实际上都在克隆s(即价格昂贵)。

另一种方法是将你的领域留在那里:

QestionList

并在构造函数中填充它:

Gene[] s;

在构造函数中执行此操作的好处是克隆只会发生一次。这也是缺点(如果你正在改变s = QestionList.ToArray(); ,那么QestionList不会反映出来。

答案 1 :(得分:0)

这应该工作:)。我认为你在错误的地方使用它。请显示一个代码,您将列表转换为数组。

string s = "select * Question, CLO, Question_Type FROM QuestionBank WHERE (Subject = '" + sub + "') AND (chapter = '" + chapter + "') AND (Question_Type = '" + qt.name + "') ORDER BY RAND() LIMIT = '" + qt.numOfType;
                SqlCommand cmd = new SqlCommand(s, con);
                SqlDataReader dr;
                con.Open();
                dr = cmd.ExecuteReader();
                dr.Read();
                while (dr.Read())
                {
                    string ques = dr["Question"].ToString();
                    string questype = dr["Question_Type"].ToString();
                    string quesCLO = dr["CLO"].ToString(); 
                    QuestionList.Add(new Gene (ques, questype, quesCLO));
                }
                 con.Close();
                 var geneArray = QuestionList.ToArray()
               }

答案 2 :(得分:0)

列表可以通过ToArray()轻松转换为数组。这里真正的问题很简单:时间和位置。调用ToArray()的代码在方法中很好,例如,它可以在方法的底部完成:

Gene[] GetThings(string subject, string chapter, ...)
{
   var list = new List<Gene>();
   ... some code that populates list

   return list.ToArray();
}

同样,在该方法结束时,您可以指定属性或字段:

   SomeMember = list.ToArray();