隐式转换错误C# netstandard2.1

Implicit conversion error C# netstandard2.1

我正在尝试将 some code 从 Net5.0 移植到 Netstandard2.1,但是 运行 出于 C# 知识。

我正在尝试重写这个函数

public static readonly Dictionary<Direction, CoordIJK> DirectionToUnitVector =
    Enum.GetValues<Direction>().ToDictionary(e => e, e => e switch {
        Direction.Invalid => CoordIJK.InvalidIJKCoordinate,
        _ => UnitVectors[(int)e]
    });

我目前的尝试是:

public static readonly Dictionary<Direction, CoordIJK> DirectionToUnitVector =
    (Direction[])Enum.GetValues(typeof(Direction)).ToString().ToDictionary(e => e, e => e switch {   
        Direction.Invalid => CoordIJK.InvalidIJKCoordinate, 
        _ => UnitVectors[(int)e]
    });

这给了我

Error   CS0266  Cannot implicitly convert type 'H3.Model.Direction' to 'char'. An explicit conversion exists (are you missing a cast?)  

供参考,Direction定义如下Enum

public enum Direction
{
    Center = 0,
    K = 1,
    J = 2,
    JK = 3,
    I = 4,
    IK = 5,
    IJ = 6,
    Invalid = 7
}

CoordIJK.InvalidIJKCoordinate定义为

public static readonly CoordIJK InvalidIJKCoordinate = new CoordIJK(-int.MaxValue, -int.MaxValue, -int.MaxValue);

public CoordIJK(int i, int j, int k) {
    I = i;
    J = j;
    K = k;
}

首先,DirectionToUnitVector 之后的所有内容对我来说几乎都是魔法符号。代码的乱码是如何变成 return a Dictionary<Direction, CoordIJK> 的,我该怎么做才能修复它?我天真地尝试在 Direction.Invalid 之前添加 (char) 来修复错误,但这并没有解决问题。

任何帮助都会很棒。

Edit001: 在原代码中添加。

问题是您不能在 .Net Standard

中以这种方式使用 switch

试试这个

using System.Linq;

public static readonly Dictionary<Direction, CoordIJK> DirectionToUnitVector =
    Enum.GetValues(typeof(Direction)).Cast<Direction>().ToDictionary(e => e, e => {
   return e == Direction.Invalid ? CoordIJK.InvalidIJKCoordinate : UnitVectors[(int)e];
});

如果您添加了 using System.Linq; 但仍然缺少 ToDictionary() 的问题,请尝试像这样重写它:

public static readonly Dictionary<Direction, CoordIJK> DirectionToUnitVector =
    System.Linq.Enumerable.ToDictionary(Enum.GetValues(typeof(Direction)).Cast<Direction>(), e => e, e => {
   return e == Direction.Invalid ? CoordIJK.InvalidIJKCoordinate : UnitVectors[(int)e];
});