Я хотел бы создать общий класс Node следующим образом:Общий класс сравнения
public class Node<T>
{
public Node<T> Next;
public Node<T> Previous;
T Content;
public Node<T>()
{
}
}
В моей основной (или из другого класса) Я хотел бы сравнивать .. что-то вроде следующего: (я использую псевдокод, чтобы проиллюстрировать мою идею, код может или не может действительно работать). В основном я хотел бы найти, есть ли элемент, который у меня есть, в списке.
main()
{
List<Node<T>> n = new List<Node<T>>()
bool found = false;
T v = new T();
foreach (Node<T> i in n)
{
if i.Content== v
{
found = true;
}
}
}
Я понимаю, для того, чтобы сравнить 2 экземпляра класса, я должен получить свой класс от IEquitable, но я хотел бы знать, если Т принадлежит к предопределенным классам, которые мы использовали все времена, как межды , double, string ... Я не хочу переопределять эти классы, но ожидаю, что сравнение будет работать и использовать компаратор по умолчанию. Как написать выше, чтобы C# принял его и выкинул синтаксическую ошибку?
if i.Content== v
{
found = true;
}
Я попытался
if (T)i.Content == (T)v
{
...
}
компилятор, кажется, не нравится. На самом деле, я сделал следующее:
Node<T> r = n.Where(x=> (T)x.Content==(T)v).FirstOrDefault()
ошибки я получил: == Оператор не может применяться к операндам типа «Т» и «Т» Пожалуйста посоветуйте. Спасибо!
Попробуйте .equals вместо == – DoctorMick
Вы действительно используете 'T' в качестве своего типа в своем коде? – Abion47