Я тестирую реализацию интерфейса IComparer для моего класса Inventory.У меня есть две версии реализации, будет ли она работать одинаково?(Вопрос 1)
class Inventory
{
public string name;
double cost;
int onhand;
public Inventory(string n, double c, int h)
{ //... }
}
}
class CustomInvComparer : IComparer<Inventory>
{
public int Compare(Inventory x, Inventory y)
{
return string.Compare(x.name, y.name, StringComparison.Ordinal);
}
}
class CompInv<T> : IComparer<T> where T : Inventory
{
public int Compare(T x, T y)
{
return string.Compare(x.name, y.name, StringComparison.Ordinal);
}
}
И почему в случаях реализации интерфейс IComparer для int32 и для строки не работает со «вторыми вариантами» (без комментария будет основная ошибкаCS0701). Я знаю, что «вторые варианты» (закомментированные) неверны с точки зрения синтаксиса «Ограничения на параметры типа (Руководство по программированию в C #)», но я не вижу логической разницы с предыдущим вариантом », где T:Inventory "?(Вопрос 2)
class CustomStringComparer : IComparer<System.String>
{
public int Compare(System.String x, System.String y)
{
return x.CompareTo(y);
}
}
//class CompStr<T> : IComparer<T> where T : System.String
//{
// public int Compare(T x, T y)
// {
// return string.Compare(x, y, StringComparison.Ordinal);
// }
//}
class CustomIntComparer : IComparer<System.Int32>
{
public int Compare(System.Int32 x, System.Int32 y)
{
return x.CompareTo(y);
}
}
//class CompStr<T> : IComparer<T> where T : System.Int32
// {
// public int Compare(T x, T y)
// {
// return string.Compare(x, y, StringComparison.Ordinal);
// }
//}