1

我正在尝试将一些代码从 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对我来说几乎都是魔法符号。乱码代码将如何返回 aDictionary<Direction, CoordIJK>以及我能做些什么来修复它?我天真地尝试在(char)之前添加Direction.Invalid以修复错误,但这并没有解决问题。

任何帮助都会很棒。

Edit001:在原始代码中添加。

4

1 回答 1

3

问题是您不能switch在 .Net Standard 中使用这种方式

尝试这个

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];
});
于 2021-09-15T23:54:49.873 回答