【发布时间】:2021-04-27 20:41:39
【问题描述】:
我正在尝试实现分类垃圾容器。不幸的是,我在 C# 方面还没有那么丰富的经验,而且我显然没有得到处理泛型方法和相应接口的意义。以下是我的部分代码。
static void RandomNumbers()
{
Random random = new Random((int)DateTime.Now.Ticks);
SortedTrashContainer<int> trash = new SortedTrashContainer<int>(10);
for (int i = 0; i < trash.Capacity; i++)
trash.Add(random.Next(10));
Console.WriteLine("== Random numbers ==");
foreach (var item in trash)
Console.Write(item + " ");
}
class SortedTrashContainer<T> where T : IContainer<T>, IComparable<T>
{
private int size;
private int pointer = 0;
private T[] items;
public int Capacity => size;
public SortedTrashContainer(int capacity)
{
if (capacity >= 0)
{
size = capacity;
items = new T[capacity];
}
else
throw new ArgumentOutOfRangeException();
}
public void Add(T item)
{
if (pointer < size)
{
items[pointer++] = item;
Sort(items);
}
else
throw new InvalidOperationException();
}
private void Sort(T[] array)
{
int top = array.Length - 1;
int indexOfLargest;
do
{
indexOfLargest = 0;
for (int i = 0; i <= top; i++)
{
if (array[indexOfLargest].CompareTo(array[i]) < 0)
indexOfLargest = i;
}
IComparable temp = (IComparable)array[top];
array[top] = array[indexOfLargest];
array[indexOfLargest] = (T)temp;
top--;
} while (top > 0);
}
}
在我声明对象trash 并引用SortedTrashContainer 并将inttype 作为参数传递的行中,我收到编译错误“类型'int'不能用作类型泛型方法 SortedTrashContainer<T> 中的参数 T。从 int 到 MyNameSpace.IContainer<int>" 没有装箱转换。不幸的是,我真的被困在这里。只是不明白这一点,什么可以解决这个问题。
【问题讨论】:
-
你的
where子句说T应该是IContainer<T>,但 T 是int -
int没有实现IContainer<T>,您已声明这两者都需要使用类型作为类型参数。因此错误。这是一个非常明显的错误。不清楚的是为什么你有这些限制,为什么你认为int会满足第一个。 -
我认为您的意思是说
class SortedTrashContainer<T> : IContainer<T> where T : IComparable<T>另外,您不需要将 T 转换为 Comparable 并返回到 T。
标签: c# collections boxing generic-method