从通用字符串数组中删除数据C#

时间:2011-03-05 09:49:25

标签: c# generics arrays

我正在学习泛型,所以我正在尝试创建自己的泛型数组类,我可以使用它来创建字符串数组或数组数据数组。这个泛型类有一些不同的方法,例如,我可以添加数据和删除数据,以及搜索数据。所有这些方法都像数字数据的魅力一样,但我在使用字符串时遇到了一些问题,因为它是一个引用类型,默认值为null,这使得我的方法抛出了空异常。

My Class看起来像这样:

class MyArray<T> : IComparable<T>, IEnumerable<T>, IEnumerator<T>
{
    T[] data = new T[10];

    private int currentIndex = 0;

    //This method works as intended, both with strings and ints
    public void Add(T Value)
    {
        data[currentIndex] = Value;
        currentIndex++;
        if (currentIndex == data.Length)
        {
            T[] tmp = new T[data.Length + 10];
            data.CopyTo(tmp, 0);
            data = tmp;

        }
    }
    //Can't figure out how to make this method work with strings
    public void RemoveItem(T Value)
    {
        T[] tmp = new T[data.Length - 1];
        int i = 0;
        foreach (T ele in data)
        {
            if (!ele.Equals(Value))//This line gives me a nullRefException when I'm using strings
            {
                tmp[i] = ele;
                i++;
            }

        }
        data = tmp;   
    }

我的主要表单,我正在添加数据并尝试删除它,如下所示:

    static void Main(string[] args)
    {
        MyArray<string> StringArray = new MyArray<string>();

        StringArray.Add("1");
        StringArray.Add("2");
        StringArray.RemoveItem("2");
    }

由于默认值为null,我无法找到一种巧妙的方法来删除数据,因为它是一个字符串。

提前致谢:)

1 个答案:

答案 0 :(得分:2)

而不是ele.Equals(Value),请使用EqualityComparer<T>.Default.Equals(ele, Value);这将适用于null(对于引用类型),Nullable<T>(对于值类型),实现IEquatable<T>的类型以及使用object.Equals的任何其他类型。< / p>

你可能想要缓存它,但是:

var comparer = EqualityComparer<T>.Default;
//loop
   if(comparer.Equals(ele,Value)) {...}