0

For example, both of these methods need to update the count variable:

        public void AddFront(T data) {
            Node<T> newNode = new Node<T>(data, null, null); 
            if (count == 0) {
                head = tail = newNode;
            }
            else {
                newNode.Next = head;
                head.Previous = newNode;
                head = newNode;
            }
            // don't forget
            count++;
        }

        public void AddBack(T data) {
            Node<T> newNode = new Node<T>(data, null, null);
            if (count == 0) {
                head = tail = newNode;
            }
            else {
                newNode.Previous = tail;
                tail.Next = newNode;
                tail = newNode;
            }
            // don't forget
            count++;
        }

I wonder is there an attribute that can force an operation like this to occur?, otherwise it will trigger a compile-time error message.

4

1 に答える 1

2

An attribute, no. (Though I will read up on Code Contracts suggested by @Michael)

You can however refactor your code. There is quite a bit of commonality. Perhaps create a single method that accepts as an additional parameter whether to add to the head or to the tail. Something like (untested):

    private void Add(T data, bool front) {
        Node<T> newNode = new Node<T>(data, null, null);
        if (count == 0) {
            head = tail = newNode;
        }
        else if (front) {
            newNode.Next = head;
            head.Previous = newNode;
            head = newNode;
        else {
            newNode.Previous = tail;
            tail.Next = newNode;
            tail = newNode;
        }
        // don't forget
        count++;
    }

    public void AddFront(T data) {
        Add(data, true);
    }

    public void AddBack(T data) {
        Add(data, false);
    }
于 2012-07-25T22:15:29.503 に答える