C# Arraylist用户选择器

C# Arraylist用户选择器,c#,arraylist,C#,Arraylist,好的,我试着制作一个简单的秘密圣诞老人程序,他们输入他们的名字,然后将他们从arraylist中删除,并将arraylist随机化,将文本输出到一个文本框,或者说,我需要它 private void button1_Click(object sender, EventArgs e) { ArrayList NameSel = new ArrayList(); NameSel.Add("name1"); NameSel.Add("name2"); NameSel.A

好的,我试着制作一个简单的秘密圣诞老人程序,他们输入他们的名字,然后将他们从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;
    }
问题在于
文本框
,特别是“
NameSel[randoms];

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

我根本不使用ArrayList,例如,为此我通常使用字符串

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

我进行了测试,这是可行的,但据我所知,我不能使用
stringname.remove(“name1”)
或任何等效工具,因此我不在我的舒适区内,任何不大量编辑原始代码的帮助都将不胜感激

您的错误输出很能说明问题,它表明如果您试图从列表中提取值并将其分配给字符串引用变量,则需要对字符串进行强制转换

string textbox=(string)NameSel[randoms]


首先声明ArrayList时,还应该能够利用泛型。新建
ArrayList()
。这样,程序就知道您需要字符串与对象的集合(这样就不需要强制转换)。

不要使用ArrayList

一个ArrayList里面可能有任何东西。您需要一个通用的
列表
。它的工作原理几乎完全相同,但只允许您在其中添加字符串,因此不会让您进行铸造


此外,分配秘密圣诞老人姓名的一种更好、更简单的方法是将列表洗牌一次(并且仅洗牌一次,因此不要将此作为现有方法的一部分),然后将每个人分配给列表中紧随其后的人(或者之前,如果您愿意)。同时将列表末尾的人员分配给列表开头的人员。这可以确保每个人都有一个指定的人,并且每个人都有一个指定的人。

不要粘贴错误的屏幕截图。这对我们这些阅读你的问题的人来说非常不方便,而且不可搜索。请将错误消息的文本粘贴到您的问题中。问题用C#tag标记。谢谢,它工作得很好,并且是一个快速编辑,谢谢!