Pour la vie de moi je ne peux pas donner un sens pourquoi ce code produit la sortie suivante ...C# Liste <T> .Find (x => x.Rectangle.Contains (point)) FAIL
Je pense qu'il est un bug ou quelque chose lorsque vous utilisez List et lambda si le type expose une propriété Rectangle et que vous utilisez la méthode Contains de l'objet rectangle ... et l'itération explicite est vraie alors que la méthode List Find échoue ....
Oneway
code
public GridSquare WorldToKeyPadSub(Point location)
{
location = _Map.WorldToClient(location);
GridSquare gs = this.Find(x => x.Rectangle.Contains(location));
GridSquare kp = gs.Find(x => x.Rectangle.Contains(location));
List<GridSquare> list = kp.FindAll(x=>x.Rectangle.Contains(location));
u.dp(list.Count);
GridSquare sub = kp.Find(x => x.Rectangle.Contains(location));
if (sub == null)
{
u.dp("Location to look for " + location);
u.dp("Found Location in grid square " + gs.ToString());
u.dp("grid square bounds " + gs.Rectangle.ToString());
u.dp("Found Location in Keypad " + kp.ToString());
u.dp("key pad bounds " + kp.Rectangle.ToString());
u.dp("Sub Key Pads Print All sub keys in this grid.keypad");
foreach (GridSquare t in kp)
{
u.dp(t.ToString() + " " + t.Rectangle.ToString());
}
u.dp("Sub Key Pads Print Explicit Finds");
foreach (GridSquare t in kp)
{
if (location.X >= t.Location.X
&& location.Y >= t.Location.Y
&& location.X <= t.Location.X + t.Rectangle.Width
&& location.Y <= t.Location.Y + t.Rectangle.Height)
{
u.dp(true);
u.dp(t.ToString() + " " + t.Rectangle.ToString());
}
}
}
return sub;
}
Cela produit la sortie suivante ...
Remarquez comment l'explicite Rectangle (méthode aka Manuel) trouve les cases de la grille qui contiennent l'emplacement .... la maison la version GDI échoue ....
Location to look for {X=1476,Y=1716}
Found Location in grid square GS: 14.3.0.0
grid square bounds {X=1398,Y=1650,Width=100,Height=100}
Found Location in Keypad GS: 14.3.6.0
key pad bounds {X=1465,Y=1683,Width=33,Height=34}
Sub Key Pads Print All sub keys in this grid.keypad
GS: 14.3.6.7 {X=1465,Y=1683,Width=11,Height=11}
GS: 14.3.6.8 {X=1476,Y=1683,Width=11,Height=11}
GS: 14.3.6.9 {X=1487,Y=1683,Width=11,Height=11}
GS: 14.3.6.4 {X=1465,Y=1694,Width=11,Height=11}
GS: 14.3.6.5 {X=1476,Y=1694,Width=11,Height=11}
GS: 14.3.6.6 {X=1487,Y=1694,Width=11,Height=11}
GS: 14.3.6.1 {X=1465,Y=1705,Width=11,Height=11}
GS: 14.3.6.2 {X=1476,Y=1705,Width=11,Height=11}
GS: 14.3.6.3 {X=1487,Y=1705,Width=11,Height=11}
Sub Key Pads Print Explicit Finds
True
GS: 14.3.6.1 {X=1465,Y=1705,Width=11,Height=11}
True
GS: 14.3.6.2 {X=1476,Y=1705,Width=11,Height=11}
A first chance exception of type 'System.NullReferenceException'
Je voudrais souligner ce qui est illégal ... Je suggère d'utiliser le Mono source comme référence. – Dykam
Je suppose que votre point de vue pourrait être possible, mais je doute que l'association au Caire de Mono puisse faire du bien à quelqu'un qui ne l'utilise pas. –