如何解决 switch 语句中的 'Use not null pattern...' 建议

How to resolve 'Use not null pattern...' suggestion in switch statement

在Visual Studio2019年,尝试使用c#的一些新特性,特别是switch语句的新特性。

我想打开一个对象的类型,我已经看到了几种实现此目的的方法,我正在使用这种方法:

private string MyFunc (Employee q)
  ....
  Type qt = q.GetType();
  switch (qt)
  {
     case Type _ when qt == typeof(HumanResources):
         //some code
         break;
     case Type _ when qt == typeof(Sales):
         //some code
         break;
     .....
     default:
         break;
  };
  .....
}

我已经更改了 class 名称,显然我没有显示所有代码。但是 case Type 的波浪线如下 suggestion/comment:

我想实施该建议,但不知道如何实施。如有任何帮助,我们将不胜感激。

我在 VS2022 中没有遇到 warning/error/suggestion。

也就是说,我建议您更恰当地使用 switch 语句:

private string MyFunc(Employee q)
{
    switch (q)
    {
        case HumanResources:
            //some code
            break;
        case Sales:
            //some code
            break;
         default:
            break;
    };
    return null;
}

因此,您不是针对 Type 元数据进行操作,而是针对实例本身进行操作。这省去了对 when 运算符的任何需求,代码对我来说更具可读性。

不要打开变量的 type,打开变量本身并根据类型使用 pattern matching 到 select 正确的大小写。

private string MyFunc (Employee q)
{
    switch (q)
    {
        case HumanResources hr:
            // some code
            break;
        case Sales s:
            // some code
            break;
        // ...
    }

    // ...
}

在这种情况下,您不需要添加变量名(hrs),它就在那里,以防您需要访问特定类型的变量。