【发布时间】:2018-03-23 11:28:11
【问题描述】:
我在需要随机创建问题以便稍后使用它来创建试卷的地方工作,所以我要做的是创建代表问题的类 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();
但它们都不起作用,它显示错误消息“字段初始化程序无法引用非静态字段方法或属性”?
【问题讨论】:
-
你在哪里尝试
Gene[] s = QestionList.ToArray();?您不能使用一个字段来初始化另一个字段 -
是的,我解决了这个问题,但没有解决问题
-
@TimSchmelter 在外部类,主类
-
外部/主类在哪里?如前所述,如果这是一个字段,则无法从另一个字段对其进行初始化。你可以这样做:
Gene[] s => QestionList.ToArray()。但是当您访问此属性时,这总是会创建一个新数组。它被称为“表达式主体属性” -
不相关,但那个 SQL 是可怕危险的。请请请使用参数。像“Dapper”这样的工具将使整个事情变得微不足道并且允许参数,例如:
Gene[] arr = con.Query<Gene>("select ... where foo = @subject and bar = @chapter ...", new { subject, chapter }).ToArray();