2015-04-01 2 views
0

моей проблема с этим кодом:ошибка синтаксиса с T элементом = по умолчанию (T)

class LinkedList<T> 
    { 

    Node<T> first; 

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

} 

Я пытаюсь создать LinkedList пустого в случае, если ничего не попадающее в качестве параметра, а в другом случае, создайте связанный список, в котором содержимое параметра будет содержимым первого узла.

Некоторое решение этой проблемы?

Большое спасибо, С уважением

+1

А в чем проблема с кодом тха tyou есть? – Servy

+0

попробуйте добавить 'where T: class'. не каждый тип действителен для 'default (T)'. также, опубликовать фактическую ошибку компиляции. – DLeh

+1

@DLeh Предположительно, он должен уметь вводить типы значений в свой связанный список, а также классы. 'default (T)' работает для всех типов (кроме указателей, я думаю). – Servy

ответ

4

Использование двух constuctors:

public LinkedList() { 
} 

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

проблема решена :-)

Если вы действительно хотите сделать что-то сравнение (я бы не советовал, но ПК является вашим):

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. Грустный.

+0

Большое спасибо, я знал, что решение построит другой конструктор, но я думал, что могу использовать перегрузку метода для этого. Думаю, я должен решить это, как в старые времена –

1

Просто используйте 2 конструктора:

class LinkedList<T> 
{ 

    Node<T> first; 

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

    public LinkedList() 
    { 

    } 

} 
Смежные вопросы