C# 与List和ArrayList的使用作斗争
我正在尝试使用以下代码来填充C# 与List和ArrayList的使用作斗争,c#,list,arraylist,C#,List,Arraylist,我正在尝试使用以下代码来填充数组列表-问题和分隔符的元素。我用两种方法来做这件事。 方法1:- List<Question> questionList = this.questionsAndSeperators.Cast<Question>().ToList(); Random rng = new Random(); int questionCount = questionList.Count; while (questionCount > 1) { que
数组列表
-问题和分隔符
的元素。我用两种方法来做这件事。方法1:-
List<Question> questionList = this.questionsAndSeperators.Cast<Question>().ToList();
Random rng = new Random();
int questionCount = questionList.Count;
while (questionCount > 1)
{
questionCount--;
int index = rng.Next(questionCount + 1);
Question value = questionList[index];
questionList[index] = questionList[questionCount];
questionList[questionCount] = value;
}
ArrayList questionList = this.questionsAndSeperators;
Random rng = new Random();
int questionCount = questionList.Count;
while (questionCount > 1)
{
questionCount--;
int index = rng.Next(questionCount + 1);
object value = questionList[index];
questionList[index] = questionList[questionCount];
questionList[questionCount] = value;
}
这里的问题
是一门课。方法2运行良好,可以覆盖
问题和分隔符的元素,但方法1无法覆盖问题和分隔符的元素。方法1的问题是什么??
我在方法1中做错了什么吗?在方法1中,您创建了一个新列表
,其中包含此问题和分隔符的所有元素。
然后洗牌新列表的所有元素。但是你不能洗牌this.questions和separator的元素,因为它是另一个数组
在方法2中,您直接访问ArrayList
,并在版本1中洗牌ArrayList
的元素,您被分配给一个名为“list”的变量,但随后您在一个名为“questionList”的变量中洗牌。我想知道这是怎么编译的。对不起,我错写了列表
。在方法1中是问题列表
。编辑否否,在方法2中,我正在填充问题列表
和问题和分隔符
的元素!在方法2questionList
和questionandseparator
中,它们是相同的对象,而方法1中它们不是相同的对象same@Jaguar这就是他所说的;通过说questionList=this.questions和separator
您使它们引用相同的对象
,在前面的方法中,元素被复制到一个新的对象
,因此洗牌只在新的对象
中发生。