# Filter

Retorna o valor opcional com o estado `IsSome` quando o valor encapsulado está no estado `IsSome` e se a função `predicate` retornar `true` ao ser aplicada ao valor, caso contrário retorna valor opcional com o estado `IsNone`.

| Parâmetros                                              | Retorno    |
| ------------------------------------------------------- | ---------- |
| <p>Func\<T, bool> predicate</p><p>Option\<T> option</p> | Option\<T> |

## Como usar

Caso o valor opcional esteja no estado `IsNone` ele simplesmente será retornado novamente.

Caso o valor opcional esteja no estado `IsSome` a função `predicate` é aplicada sobre o valor encapsulado e caso a `predicate` retornar `true` o valor opcional é retornado novamente, caso contrário é retornado um valor opcional no estado `IsNone`.

&#x20;**Quando o valor opcional está no estado IsSome e a função retorna true**

```csharp
Option<int> optionValue = 4;
Option<int> result = optionValue.Filter(value => value % 2 == 0);

//result.IsSome = true
//result.Some = 4
```

&#x20;**Quando o valor opcional está no estado IsSome e a função retorna false**

```csharp
Option<int> optionValue = 3;
Option<int> result = optionValue.Filter(value => value % 2 == 0);

//result.IsSome = false
//result.IsNone = true
```

&#x20;**Quando o valor opcional está no estado IsNone**&#x20;

```csharp
Option<int> optionValue = Option<int>.None();
Option<int> result = optionValue.Filter(value => value % 2 == 0);

//result.IsSome = false
//result.IsNone = true
```
