[C# 10] How to use declaration patterns with a switch statement?
The documentation uses is in the example for "declaration patterns" but the book I am reading uses a switch statement. But when I try to run the code I run into errors.
using System;
public class Program
{
public static void Main()
{
var o = 42;
switch (o) {
case string s:
Console.WriteLine($"A piece of string is {s.Length} long");
break;
case int i:
Console.WriteLine($"That's numberwang! {i}");
break;
}
}
}
Error:
Compilation error (line 7, col 6): An expression of type 'int' cannot be handled by a pattern of type 'string'.
EDIT
Changing from
var o = 42;
to
object o = 42;
worked.
Full code: https://github.com/idg10/prog-cs-10-examples/blob/main/Ch02/BasicCoding/BasicCoding/Patterns.cs
An integer will never be a string. Originally you create an integer variable so it's telling you the string case is pointless.
Your code does not follow the pattern matching syntax; I don't see "is" anywhere. That's what is actually doing the casting
Edit: I think I'm completely wrong about "is" being required
I see.
The book uses a very specific scenario where
ois an object that would accept any type. So using the object data type worked. Check the OP for the edit.I see, using "is" could be a downcast from any type. But from object it would always be an upcast so you don't need an explicit casting operator
So c# in runtime already knows the type of o(unless you do some silly magic ofcourse) If you wanna change o for debug purposes you can try .GetType() and typeOf
You can check the type with
(Sorry for any errors I'm on phone so code fiddlers aren't that great)
The book uses a very specific scenario where
ois an object that would accept any type. So using the object data type worked. Check the OP for the edit.The "is" is a part of pattern matching which I don't believe regular switches can do. Only switch expressions. The example in the link you gave is checking the type by casting using "is".