T元素的错误语法!= default(T)

时间:2015-04-01 20:12:21

标签: c# generics overloading

我的问题在于此代码:

class LinkedList<T>
    {

    Node<T> first;

    public LinkedList(T element=default(T)) { 
        if (element != default(T)) **<---- problem here**
            first = new Node<T>(element);
    }

}

我试图在没有任何东西作为参数传递的情况下创建一个LinkedList为空,而在另一种情况下,创建一个linkList,其中param的内容将是第一个节点的内容。

解决这个问题的一些方法?

非常感谢,问候

2 个答案:

答案 0 :(得分:4)

使用两个构造函数:

public LinkedList() { 
}

public LinkedList(T element=default(T)) { 
    first = new Node<T>(element);
}

问题解决了: - )

如果你真的想做一个比较(我不建议,但PC是你的):

public LinkedList(T element=default(T)) { 
    var comparer = EqualityComparer<T>.Default;

    if (!comparer.Equals(element, default(T))) 
        first = new Node<T>(element);
}

举一个例子说明为什么这是错误的...... 0 (zero)是一个美丽的数字...所以圆...没有丑陋的角落,有点像8 :-),它是他说阿拉伯人“发明了”它,它是现代数学的核心。现在...... default(int) == 0。悲伤。

答案 1 :(得分:1)

只需使用2个构造函数:

class LinkedList<T>
{

    Node<T> first;

    public LinkedList(T element) 
    { 
        first = new Node<T>(element);
    }

    public LinkedList() 
    { 

    }

}