2017-06-06 49 views
0

好的,所以我想制作一个简单的秘密圣诞老人程序,他们键入他们的名字,然后将他们从arraylist中删除,然后随机化arraylist并将文本输出到文本框,或者我应该说,我需要它。Arraylist用户选择器

private void button1_Click(object sender, EventArgs e) 
{ 
    ArrayList NameSel = new ArrayList(); 
    NameSel.Add("name1"); 
    NameSel.Add("name2"); 
    NameSel.Add("name3");; 
    if (textBox1.Text == "name1") 
    { 
     NameSel.Remove("name1"); 
     Random rand = new Random(); 
     int randoms = rand.Next(NameSel.Count); 
     string textbox = NameSel[randoms]; 
     textBox2.Text = textbox; 
    } 

问题在于在textbox,特别是 “NameSel[randoms];”。

无法将类型'object'隐式转换为'string'。一个显式转换存在(是否缺少强制转换?)

我不同意的ArrayList在所有的工作,为了这个,我通常是一个字符串,例如

string[] names = new string[] 
{ 
    "name1", 
    "name2", 
    "name3", 
}; 

而且我测试,以及作品,但据我所知,我不能使用stringname.remove("name1")或任何等价物,所以我超出了我的舒适区域,任何不会大量编辑原始代码的帮助都会被赞赏!

+1

请勿粘贴错误截图。这对我们读这个问题的人来说是非常不方便的,而且这是不可搜索的。请将错误消息的文本粘贴到您的问题中。 –

回答

0

不要使用ArrayList!

一个ArrayList可以有什么在里面。你需要一个通用的List<string>。它的工作原理几乎完全一样,但只会让你放入字符串,因此不会让你做投射。

此外,用于分配的秘密圣诞老人的名字更好和更简单的方法是一次洗牌的列表(和一次,所以不要以此作为现有方法的一部分),然后分配给每个人的人谁在名单后面(或之前,如果你喜欢)。还要将名单末尾的人员分配给开始时的人员。这确保每个人都有一个人分配给他们,并且每个人都被分配给某人。

+0

谢谢,它工作得很好,并且是一个快速编辑,谢谢! – Micha

0

你的错误输出是很能说明问题,它说明你需要转换成String,如果你正试图从你的列表拉一个值,并将其赋值给一个字符串引用变量。

I.E. string textbox = (string)NameSel[randoms];

在首先声明ArrayList时,您还应该能够利用泛型。新ArrayList<String>()。这样程序就知道你需要一个字符串vs对象的集合(然后不需要强制转换)。

+0

问题标记为C#标记。 –