隐式转换错误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];
});
我正在尝试将 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];
});