summaryrefslogtreecommitdiffstats
path: root/docs/user-guide/06-interfaces-generics.md
diff options
context:
space:
mode:
authorJulius Ikkala <julius.ikkala@gmail.com>2025-06-28 05:39:24 +0300
committerGitHub <noreply@github.com>2025-06-28 02:39:24 +0000
commit7349dc5cff49cf22c82eb912813e47f30cd7a757 (patch)
tree4d7b3e14f119e7bb48623e52c890b461fd3d9701 /docs/user-guide/06-interfaces-generics.md
parenta13dda4f214274a10d39f37c79622fc3e62da310 (diff)
Minimal optional constraints (#7422)
* Parse optional witness syntax * Allow failing optional constraint * Make `is` work with optional constraint * Allow using optional constraint in checked if statements * Fix tests * Make it work with structs * Fix MSVC build error * Disallow using `as` with optional constraints * Update test to match split is/as errors * Add tests * Fix uninitialized variables in tests * Add tests of incorrect uses & fix related bugs * Mention optional constraints in docs * format code * Fix type unification with NoneWitness * Fix formatting --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> Co-authored-by: Nathan V. Morrical <natemorrical@gmail.com>
Diffstat (limited to 'docs/user-guide/06-interfaces-generics.md')
-rw-r--r--docs/user-guide/06-interfaces-generics.md22
1 files changed, 22 insertions, 0 deletions
diff --git a/docs/user-guide/06-interfaces-generics.md b/docs/user-guide/06-interfaces-generics.md
index bb19fd776..7c957f685 100644
--- a/docs/user-guide/06-interfaces-generics.md
+++ b/docs/user-guide/06-interfaces-generics.md
@@ -144,6 +144,28 @@ struct MyType<T, U>
}
```
+Optional conformances can be expressed compactly using the `where optional` syntax:
+```csharp
+// Together, these two overloads...
+int myGenericMethod<T>(T arg)
+{
+}
+
+int myGenericMethod<T>(T arg) where T: IFoo
+{
+ arg.myMethod(1.0);
+}
+
+// ... are equivalent to:
+int myGenericMethod<T>(T arg) where optional T: IFoo
+{
+ if (T is IFoo)
+ {
+ arg.myMethod(1.0); // OK in a block that checks for T: IFoo conformance.
+ }
+}
+```
+
Supported Constructs in Interface Definitions
-----------------------------------------------------