안녕하세요, 나는 값을 사전에 수정하려고하지만 컴파일러는 KeyNotFoundException
을 던졌습니다. 확실한 것은 사전에 그 키를 선언했기 때문입니다. GenerateEmptyChunks()
메서드를 호출했습니다.이 메서드는 레벨 생성기에 대해 값이 비어있는 위치와 키가있는 청크로 사전을 채 웁니다. 나는 디버거를 검사했고 Chunks
사전 개체가 키와 값으로 올바르게 채워져 있습니다. 그것은 내 unworking CompareTo
방법으로 인해 발생합니까? 그렇다면 올바른 값을 반환하기 위해 CompareTo
메서드를 수정하는 방법은 무엇입니까?KeyNotFoundException 가득 차있는 dictonary
public Dictionary<WPoint, WChunk> Chunks = new Dictionary<WPoint, WChunk>();
GenerateEmptyChunks()있어서
public void GenerateEmptyChunks(int Xcount, int Ycount)
{
for(int x = 0; x <= Xcount; x++)
{
for (int y = 0; y <= Ycount; y++)
{
this.Chunks.Add(new WPoint(x, y), new WChunk(x, y));
}
}
}
AddBlock() 각 타일 레벨 발생기라고있어서
public void AddBlock(WPoint location, int data)
{
this.Chunks[location.GetChunk()].AddTile(new WTile(location, data));
}
WChunk 개체 :
public class WChunk
{
public int ChunkX;
public int ChunkY;
public SortedDictionary<WPoint, WTile> Tiles = new SortedDictionary<WPoint, WTile>();
public WChunk(int posX, int posY)
{
ChunkX = posX;
ChunkY = posY;
}
public void AddTile(WTile tile)
{
Tiles.Add(tile.GetLocation(), tile);
}
}
WPoint 객체 : 그들은 사전에
public class WPoint : IComparable
{
public float X;
public float Y;
public WPoint(float x, float y)
{
X = x;
Y = y;
}
public WPoint GetChunk()
{
//Oprava pre bloky mensie ako (1,1)
if (X <= 16 && Y <= 16)
{
return new WPoint(0, 0);
}
else
{
double pX = (double)(X/16);
double pY = (double)(Y/16);
return new WPoint((int)Math.Floor(pX), (int)Math.Floor(pY));
}
}
public int CompareTo(object obj)
{
WPoint point2 = (WPoint)obj;
if (point2.X == this.X && point2.Y == this.Y)
{
return 0;
}
else if (point2.X >= this.X && point2.Y >= this.Y)
{
return -1;
}
else
{
return 1;
}
}
}
이유는 컴파일러가 키를 거부되는 모든 아이디어를 있습니까?
고맙습니다. 작동합니다. –