Создайте структуру данных , которая будет содержать типы:
class BlockDescriptor
{
public Tile Tile { get; }
public int Hardness { get;}
public string DisplayName { get; }
public bool HasGravity { get; }
public BlockDescriptor(Tile tile, int hardness, string name, bool gravity)
{
Tile = tile;
Hardness = hardness;
DisplayName = name;
HasGravity = gravity;
}
}
Затем вы можете сохранить их в словаре:
Dictionary<int, BlockDescriptor> blockProperties = new Dictionary<int, BlockDescriptor>();
blockProperties.Add(0, new BlockDescriptor(/* Tile */, 1, "Block A", false);
blockProperties.Add(1, new BlockDescriptor(/* Tile */, 2, "Block B", true);
В качестве альтернативы вы можете использовать tuple :
var blockProperties = new Dictionary<int, (Tile, int, string, bool)>();
blockProperties.Add(0, (/* Tile */, 0, "Block A", false));
blockProperties.Add(1, (/* Tile */, 1, "Block B", true));
Я рекомендую выбирать структуру данных, поскольку вы можете реализовать различные интерфейсы, такие как IEquatable, IEqualityComparer, чтобы влиять на поведение в запросах LINQ, контейнерах и т. Д. Кроме того,он предоставляет потенциал для различных свойств самоанализа (например, IsUnbreakable, HasTileWithTransparency) или методов (например, CalculateHardness)