# GetHashCode()

> Calculates the hash code for use in collections.

## Definition

* **Type:** Method
* **Namespace:** [Unity.AI.Navigation.LowLevel](/engine/6000.5/script-reference/unity/ai/navigation/lowlevel.md)
* **Assembly:** UnityEngine.AIModule

```csharp
public override readonly int GetHashCode()
```

### Returns

| Type                                                       | Description                                                                                                      |
| ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| [int](https://learn.microsoft.com/dotnet/api/system.int32) | The hash code derived from the internal identifier of this NavWorld, suitable for use in hash-based collections. |

### Remarks

The returned value is derived from the internal identifier of the [NavWorld](/engine/6000.5/script-reference/unity/ai/navigation/lowlevel/navworld.md) and is suitable for storing worlds in hash-based collections such as Dictionary or HashSet. Two NavWorld values that compare equal through [NavWorld.Equals](/engine/6000.5/script-reference/unity/ai/navigation/lowlevel/navworld/equals.md) also produce the same hash code.

The reverse doesn't hold. Two NavWorld handles that refer to different navigation data can produce the same hash code, so a matching hash code on its own doesn't establish that two handles are the same. Use [NavWorld.Equals](/engine/6000.5/script-reference/unity/ai/navigation/lowlevel/navworld/equals.md) or the `==` operator whenever you need to determine that.

### Examples

```csharp
using UnityEngine;
using UnityEngine.AI;
using Unity.AI.Navigation.LowLevel;

public class NavWorldEqualityExample : MonoBehaviour
{
    NavWorld m_World;
    int m_CachedWorldHash;

    void OnEnable()
    {
        m_World = NavWorld.GetDefaultWorld();
        m_CachedWorldHash = m_World.GetHashCode();
        Debug.Log($"Cached the NavMesh world hash {m_CachedWorldHash}");
        CompareNavigationWorldToPrevious();

        // Destroying all the data makes every existing handle to the old world invalid.
        NavMesh.RemoveAllNavMeshData();
        Debug.Log($"Removed all NavMesh data.");

        //m_CachedWorldHash = m_World.GetHashCode();
        //Debug.Log($"Cached the NavMesh world, hash {m_CachedWorldHash}");
        CompareNavigationWorldToPrevious();
    }

    public void CompareNavigationWorldToPrevious()
    {
        NavWorld currentWorld = NavWorld.GetDefaultWorld();

        // Equals, == and != compare the underlying navigation system rather than the struct
        // copy, so two handles obtained from the same world always compare equal.
        if (currentWorld == m_World)
        {
            Debug.Log($"The navigation world is the same as before.");

            // The handles are interchangeable, so keep one and release the duplicate.
            currentWorld.Dispose();
            return;
        }

        Debug.Log($"The world was re-created: hash {m_CachedWorldHash} became {currentWorld.GetHashCode()}");

        // Release the stale handle before replacing it, otherwise its safety handle leaks.
        m_World.Dispose();
        m_World = currentWorld;
        m_CachedWorldHash = m_World.GetHashCode();
    }

    void OnDisable()
    {
        m_World.Dispose();
    }
}
```
