this post was submitted on 04 Jul 2023
12 points (100.0% liked)

.NET

1431 readers
5 users here now

Getting started

Useful resources

IDEs and code editors

Tools

Rules

Related communities

Wikipedia pages

founded 1 year ago
MODERATORS
 

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

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 3 points 1 year ago* (last edited 1 year ago) (1 children)

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

[–] [email protected] 2 points 1 year ago (1 children)

I see.

The book uses a very specific scenario where o is an object that would accept any type. So using the object data type worked. Check the OP for the edit.

[–] [email protected] 1 points 1 year ago

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