Skip to content

Commit fa0753a

Browse files
authored
📝 Document dictionary extension methods in README (#23)
1 parent ac6e885 commit fa0753a

1 file changed

Lines changed: 21 additions & 0 deletions

File tree

README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ dotnet add package OptionalValues.FluentValidation
9393

9494
- **Distinguish Between Unspecified and Null Values**: Clearly differentiate when a value is intentionally `null` versus when it has not been specified at all. This allows for mapping `undefined` values in JSON to `Unspecified` values in C#.
9595
- **JSON Serialization Support**: Includes a custom JSON converter and TypeResolverModifier that correctly handles serialization and deserialization, ensuring unspecified values are omitted from JSON outputs.
96+
- **Dictionary Extensions**: Extension methods for working with dictionaries and `OptionalValue<T>`, including `GetOptionalValue`, `AddOptionalValue`, `TryAddOptionalValue`, and `SetOptionalValue`.
9697
- **Optional DataAnnotations**: An extension library that provides support for DataAnnotations validation attributes on `OptionalValue<T>` properties.
9798
- **FluentValidation Extensions**: Provides extension methods to simplify the validation of `OptionalValue<T>` properties using FluentValidation.
9899
- **OpenApi/Swagger Support**:
@@ -115,6 +116,7 @@ dotnet add package OptionalValues.FluentValidation
115116
- [Accessing the Value](#accessing-the-value)
116117
- [Implicit Conversions](#implicit-conversions)
117118
- [Equality Comparisons](#equality-comparisons)
119+
- [Dictionary Extensions](#dictionary-extensions)
118120
- [JSON Serialization with System.Text.Json](#json-serialization-with-systemtextjson)
119121
- [Serialization Behavior](#serialization-behavior)
120122
- [Deserialization Behavior](#deserialization-behavior)
@@ -233,6 +235,25 @@ bool areEqual = value1 == value2; // True
233235
bool areUnspecifiedEqual = unspecified == new OptionalValue<string>(); // True
234236
```
235237

238+
## Dictionary Extensions
239+
240+
Extension methods for working with dictionaries and `OptionalValue<T>`:
241+
242+
```csharp
243+
using OptionalValues.Extensions;
244+
245+
var settings = new Dictionary<string, int> { ["timeout"] = 30 };
246+
247+
// Get value as OptionalValue (returns Unspecified if key not found)
248+
OptionalValue<int> timeout = settings.GetOptionalValue("timeout"); // IsSpecified == true
249+
OptionalValue<int> retries = settings.GetOptionalValue("retries"); // IsSpecified == false
250+
251+
// Add/Set only when value is specified
252+
settings.AddOptionalValue("maxRetries", new OptionalValue<int>(3)); // Adds the value
253+
settings.AddOptionalValue("other", OptionalValue<int>.Unspecified); // Does nothing
254+
settings.SetOptionalValue("timeout", new OptionalValue<int>(60)); // Updates to 60
255+
```
256+
236257
## JSON Serialization with System.Text.Json
237258

238259
`OptionalValue<T>` includes a custom JSON converter and JsonTypeInfoResolver Modifier to handle serialization and deserialization of optional values.

0 commit comments

Comments
 (0)