public IEnumerable <HitInfo <float3> > Raycast(RayDescription ray) { float epsilon = 0.0001f; foreach (var item in XYlow.Raycast(ray) .Concat(XYup.Raycast(ray) .Concat(XZlow.Raycast(ray) .Concat(XZup.Raycast(ray) .Concat(YZlow.Raycast(ray) .Concat(YZup.Raycast(ray)))))) .OrderBy(x => x.T)) { if (lowerBound.x <= item.Attribute.x + epsilon && item.Attribute.x <= upperBound.x + epsilon && lowerBound.y <= item.Attribute.y + epsilon && item.Attribute.y <= upperBound.y + epsilon && lowerBound.z <= item.Attribute.z + epsilon && item.Attribute.z <= upperBound.z + epsilon) { yield return(item); break; } } }