# Switch Menu Path : **Operator > Logic > Switch** The **Switch** Operator compares its input to case values and outputs a value which depends on whether the input matches a case: - If the input matches a case value, this Operator outputs the value that corresponds to the matched case. - If the input does not match a case value, this Operator outputs a default value. This works similarly to a [switch statement](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/switch) in C#. ## Operator settings | **Property** | **Type** | **Description** | | --------------------- | ------------ | ------------------------------------------------------------ | | **Entry Count** | Unsigned int | The number of cases to test. The maximum value is **32**. | | **Custom Case Value** | bool | (**Inspector**) When enabled, you can specify custom case integers for each case. Otherwise, this Operator uses the default natural. | ## Operator properties | **Input** | **Type** | **Description** | | -------------- | --------------------------------------- | ------------------------------------------------------------ | | **Test Value** | int | Input integer value which is going to be tested with the case entries. If you enable **Custom Case Value** and this value matches more than one case, this Operator outputs the first entry that matches. | | **Case 0** | int | The value to test for the first case. If you assign this port, it overrides the value this Operator checks **Test Value** against. The default value for this port is **0**. This port only appears if you enable **Custom Case Value**. | | **Value 0** | [Configurable](#operator-configuration) | The value to output if **Test Value** matches **Case 0**. | | **Case 1** | int | The value to test for the first case. If you assign this port, it overrides the value this Operator checks **Test Value** against. The default value for this port is **1**. This port only appears if you enable **Custom Case Value**. | | **Value 1** | [Configurable](#operator-configuration) | The value to output if **Test Value** matches **Case 1**. | | **Case N** | int | To expose more cases, increase the **Entry Count**. | | **Value N** | [Configurable](#operator-configuration) | To expose more values, increase the **Entry Count**. | | **Default** | [Configurable](#operator-configuration) | The default value to output if no cases match. | | **Output** | **Type** | **Description** | | ---------- | --------------------------------------- | ------------------------------------------------------------ | | **Output** | [Configurable](#operator-configuration) | The value that corresponds to the case that matches **Test Value**, or **Default** if no cases match. | ## Operator configuration To view the Operator's configuration, click the **cog** icon in the Operator's header. | **Property** | **Description** | | ------------ | ------------------------------------------------------------ | | **Type** | The value type this Operator uses. For the list of types this property supports, see [Available types](#available-types). | ### Available types You can use the following types for your **Input values** and **Output** ports: - **Bool** - **Int** - **Uint** - **Float** - **Vector2** - **Vector3** - **Vector4** - **Gradient** - **AnimationCurve** - **Matrix** - **OrientedBox** - **Color** - **Direction** - **Position** - **Vector** - **Transform** - **Circle** - **ArcCircle** - **Sphere** - **ArcSphere** - **AABox** - **Plane** - **Cylinder** - **Cone** - **ArcCone** - **Torus** - **ArcTorus** - **Line** - **Flipbook** - **Camera** This list does not include any type that corresponds to a buffer or texture because it is not possible to assign these types as local variables in generated HLSL code.