Сравнение в универсальных классах - C#
Формулировка задачи:
Приветствую всех!
Столкнулся с проблемой при работе с шаблонными классами.
Суть в следующем: есть сущности, реализующие интерфейс IEntity<IdT>, для которых предусматривается обязательное наличие свойства Id типа IdT. По сути Id может быть любого типа (int, string, decimal)
Проблема возникает в классе C, там используется Compare для сравнения двух сущностей. Если в качестве условия к классу С указать и это правильно, т.к. int - структура
Если убрать условие
или указать, что IdT - структура (при этом возникнет при попытке использовать ключ типа string)
то компилятор ругается на строку
Подскажите, как правильно сделать это сравнение?
class Program { static void Main() { C<B, A,int> c1 = new C<B, A,int>(); A a1 = new A() { Id = 1, Name = "sfgsd" }; B b1 = new B() { Id = 1, Value = 123123 }; bool rez = c1.Compare(b1, a1); Console.WriteLine(rez); Console.ReadLine(); } } interface IEntity<IdT> { IdT Id { get; set; } } interface IName<IdT> : IEntity<IdT> { string Name { get; set; } } interface IValue<IdT> : IEntity<IdT> { decimal Value { get; set; } } class C<ET, NT, IdT> where ET : class, IEntity<IdT> where NT : class, IName<IdT> where IdT : class { public bool Compare(ET obj1, NT obj2) { return obj1.Id == obj2.Id; } } class A : IName<int> { public int Id { get; set; } public string Name { get; set; } } class B : IValue<int> { public int Id { get; set; } public decimal Value { get; set; } }
where IdT : class
, то проблемы возникают при объявленииC<B, A,int> c1 = new C<B, A,int>();
class C<ET, NT, IdT> where ET : class, IEntity<IdT> where NT : class, IName<IdT> { public bool Compare(ET obj1, NT obj2) { return obj1.Id == obj2.Id; } }
class C<ET, NT, IdT> where ET : class, IEntity<IdT> where NT : class, IName<IdT> where IdT : struct { public bool Compare(ET obj1, NT obj2) { return obj1.Id == obj2.Id; } }
return obj1.Id == obj2.Id;
Operator '==' cannot be applied to operands of type 'IdT' and 'IdT'
Решение задачи: «Сравнение в универсальных классах»
textual
Листинг программы
C<B, A,int> c1 = new C<B, A,int>();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д