public class CubicMatrix<Object?>
{
private int width;
private int height;
private int depth;
private Object[, ,] matrix;
public CubicMatrix(int inWidth, int inHeight, int inDepth)
{
width = inWidth;
height = inHeight;
depth = inDepth;
matrix = new Object[inWidth, inHeight, inDepth];
}
public void Add(Object toAdd, int x, int y, int z)
{
matrix[x, y, z] = toAdd;
}
public void Remove(int x, int y, int z)
{
matrix[x, y, z] = null;
}
public void Remove(Object toRemove)
{
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
for (int z = 0; z < depth; z++)
{
Object value = matrix[x, y, z];
bool match = value.Equals(toRemove);
if (match == false)
{
continue;
}
matrix[x, y, z] = null;
}
}
}
}
public IEnumerable<Object> Values
{
get
{
LinkedList<Object> allValues = new LinkedList<Object>();
foreach (Object entry in matrix)
{
allValues.AddLast(entry);
}
return allValues.AsEnumerable<Object>();
}
}
public Object this[int x, int y, int z]
{
get
{
return matrix[x, y, z];
}
}
public IEnumerable<Object> RangeInclusive(int x1, int x2, int y1, int y2, int z1, int z2)
{
LinkedList<Object> list = new LinkedList<object>();
for (int a = x1; a <= x2; a++)
{
for (int b = y1; b <= y2; b++)
{
for (int c = z1; c <= z2; c++)
{
Object toAdd = matrix[a, b, c];
list.AddLast(toAdd);
}
}
}
return list.AsEnumerable<Object>();
}
public bool Available(int x, int y, int z)
{
Object toCheck = matrix[x, y, z];
if (toCheck != null)
{
return false;
}
return true;
}
}
Я создал класс Cubic Matrix в C# для хранения предметов в 3-х измерениях. Мне нужно иметь возможность добавлять и удалять элементы, поэтому я использую Object? (Я был убежден, что вы не можете использовать генерируемые нулями генераторы, т. Е. T?). Однако такой подход gnerates ошибкаОбнаруживаемый набор общих объектов
объявление параметра типа должно быть идентификатором не тип
Если я не использую объект? хотя и просто используйте Object или T, я получаю эту ошибку вместо этого.
Невозможно преобразовать значение null в тип параметра 'T', потому что это может быть тип значения, не равный nullable. Вместо этого используйте «default (T)».
Каков правильный синтаксис и подход к использованию в этом случае?
Есть несколько возможных решений здесь: http://stackoverflow.com/questions/19831157/c-sharp-generic-type-constraint-for-everything-nullable –