HelloWorld.Coordinate.GetAdjacents C# (CSharp) Method

GetAdjacents() private static method

private static GetAdjacents ( int distance ) : HashSet
distance int
return HashSet
        private static HashSet<Coordinate> GetAdjacents( int distance )
        {
            if ( distance < 1 )
            return new HashSet<Coordinate>();

              lock ( _sync )
              {

            HashSet<Coordinate> adjacents;

            if ( adjacentsCache.TryGetValue( distance, out adjacents ) )
              return adjacents;

            var temp1 = GetAdjacents( distance - 2 );
            var temp2 = GetAdjacents( distance - 1 ).Except( temp1 );//得到外环
            adjacents = new HashSet<Coordinate>( temp2.SelectMany( item => GetAdjacents( 1 ).Select( i => i + item ) ) );
            adjacents.UnionWith( temp1 );
            adjacents.ExceptWith( new[] { Origin } );

            return adjacentsCache[distance] = adjacents;
              }
        }