使用数组和链接列表 - 使用整数和字符串进行转换

 手机用户2602883667 发布于 2023-02-07 18:56

所以我已经编程了大约6个月,因为它是休息,我很无聊,玩弄东西.我再次讨论了数组的概念并制作了一个数组,它产生了50个randoms数字,并使用插入排序对它们进行排序.然后我开始搞乱字符串数组.string[] array = new string[] { "Ultima Online", "Everquest", "Baldur's Gate", "Diablo I"};是我的字符串数组.为了让它显示整个字符串,我使用了一个链表(我不确定是否必须这样,我试图将其转换为无效,即Convert.ToString(数组)失败).所以我有这个

static void Main(string[] args)
    {
        string[] array = new string[] { "Ultima Online", "Everquest", "Baldur's Gate", "Diablo I"};
        List list = new List(array);

        for (int i = 0; i < list.Count; i++)
        {
            Console.WriteLine(list[i]);
        }
    }

这将显示整个阵列.然后我想如果我想删除或添加一些内容.所以,我放在list.RemoveAt(2);我的上方Console.Writeline(list[i]);

但这确实是我没想到的.它会删除列表中第二个点之后的所有内容.所以我假设RemoveAt()将始终删除指示的值之后的所有内容.但是,list.Remove(2);给出了我的错误.1.参数1:无法从'int'转换为'string'然后2.最好的重载方法匹配... etc ..参数.我的演员再次无效.所以,我回到了RemoveAt,想了一下.出于某种原因,我想如果我使用等效的if语句,它会起作用,而且确实如此.

static void Main(string[] args)
    {
        string[] array = new string[] { "Ultima Online", "Everquest", "Baldur's Gate", "Diablo I" };
        List list = new List(array);

        for (int i = 0; i < list.Count; i++)
        {
            if (i == 2)
            {
                list.RemoveAt(2);
            }
            Console.WriteLine(list[i]);
        }

所以,我的问题是:为什么异常发生在Remove()而不是RemoveAt().为什么if语句有效?我在黑暗中拍摄它并且它有效,我可以理解为什么它有效,但不是为什么简单的RemoveAt()不起作用.最后,有没有比链表更好的转换方式?

感谢任何回答这些问题的人.我是编程新手,我正在尝试理解在我的书和MSDN.com以及DotPearl上飞过我的一些概念......

1 个回答
  • RemoveAt 删除该索引处的元素.它并不能消除所有跟随它的元素.

    除非....你把它放在一个循环中.

    你做了什么.

    所以你的循环做了这个:

      删除元素2,输出元素0

      删除元素2,输出元素1

      删除元素2,输出元素2

      ... 等等

    因为这个"工作":

    for (.....; i < list.Count; ..... )
                ^-- this ----^
    

    基本上,你的循环和列表看起来像这样:

      列表是"Ultima Online","Everquest","Baldur's Gate","暗黑破坏神I"(4个元素,0个元素,元素0到3)

      索引为0,删除元素2,"Baldur's Gate",输出元素0,"Ultima Online"

      索引是1,仍然低于长度(现在是3),所以删除元素2,"暗黑破坏神I",输出元素1,"无尽的任务"

      索引是2,现在等于length(现在是2),所以退出

    您在枚举时更改了列表,并且每次迭代都更改了列表.

    之所以list.Remove(2)不起作用是因为:

      list.RemoveAt(x) 指定索引,并删除该索引处的元素

      list.Remove(x) 指定一个值,列表中具有该值的第一个元素将被删除

    现在在这种情况下你已经说过列表是一个字符串列表,你要求它删除一个整数.C#/ .NET不允许这样的恶作剧,因此在你允许运行程序之前告诉你这个问题.

    有关更多信息,请查看以下文档:

    List<T>

    List<T>.RemoveAt 方法

    List<T>.Remove 方法

    2023-02-07 18:58 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有