如何在 C# 中删除(或取消)泛型数组列表中的对象? [复制]

Posted

技术标签:

【中文标题】如何在 C# 中删除(或取消)泛型数组列表中的对象? [复制]【英文标题】:How do I remove (or nullify) an object in an array list of generics in C#? [duplicate] 【发布时间】:2020-07-23 19:08:17 【问题描述】:

在我的数据结构类中,我的任务是创建给定类型的通用对象的 ArrayList。这本质上是一个行为类似于附加了一些额外功能的数组的类。它看起来像这样。

    public class GenericArray<T>
    
        // The array
        private T[] array;
        private int size;

        // Constructor
        public GenericArray(int arrsize)
        
            size = arrsize;
            array = new T[size + 1];
        
        // Array methods
        public T getItem(int index)
        
            return array[index];
        
        public int getCount()
        
            int count = 0;

            for(int i = 0; i < array.Length; ++i)
            
                if(array[i] != null)
                    count++;
            
            size = count;
            return count;
        
    

我们需要创建用于与数组交互的各种方法。在从数组中删除项时,我遇到了一个特殊问题。我有一个 deleteLast 方法,我假设它只是将最后一项设置为 null,如下所示:

        public void deleteLast()
        
            int i = this.getCount()-1;
            array[i] = null;
        

但是,我收到无法将参数转换为 null 的错误,因为 T 可能不是可以为 null 的值类型,这是有道理的。但是,我不知道如何删除它们。我通过 Google 找不到任何有用的信息,所以我来到了 Stack Overflow。

感谢任何帮助。谢谢:)

【问题讨论】:

docs.microsoft.com/en-us/dotnet/csharp/language-reference/… 我现在明白了。非常感谢:) 【参考方案1】:

为什么不使用 List 而不是 T[] ?那应该可以轻松解决您的所有问题! 您还没有处理数组大小更改(用于增加和减少数组大小)、枚举等方面的情况。理想情况下,我会实现 IEnumerable 并实现其余功能!

【讨论】:

这会破坏学习如何实现数据结构的目的。 在数组中你实际上并没有删除一个项目。相反,您可以将数组项设置为类型 T 的默认值 我实际上已经处理了有关数组大小调整的案例。我只是没有将它包含在我的示例代码中,因为我觉得没有必要展示我遇到的问题。 哦,是的!你说的对。我现在看到你的评论了??

以上是关于如何在 C# 中删除(或取消)泛型数组列表中的对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C# 中的多维数组列表或列表?

C# Unity如何只选择数组中的一项并取消选择其他项

根据判断条件删除数组(对象)中的某一项

根据判断条件删除数组(对象)中的某一项

取消选择数据表行后如何正确删除数组中的索引或值?

C#中ArrayList和泛型集合List方法概述概述