C#中枚举的静态构造方法

Static construction methods for enums in C#

我正在尝试向 C# 枚举添加静态方法。通过添加 static class,我可以创建一个 'getter' 方法,它将枚举值转换为例如一个字节。但是,我似乎无法创建一个 'construction' 方法,该方法获取字节并将其转换为枚举。在 java 中,我将使用下面的代码而不使用单独的静态 class.

枚举代码:

public enum PoseLocation {

  UP,
  DOWN,
  LEFT,
  RIGHT,
  UP_LEFT,
  UP_RIGHT,
  DOWN_LEFT,
  DOWN_RIGHT

}

public static class PoseLocationMethods {

  public static byte toByte (this PoseLocation location) {
    return (byte)location;
  }

  public static PoseLocation fromByte (byte poseByte) {
    return (PoseLocation)poseByte;
  }

}

方法调用:

byte poseByte = PoseLocation.UP.toByte (); //OK
PoseLocation fromByte = PoseLocation.fromByte (poseByte); //this does not work

你好像认为fromByte也是一种扩展方法...

仔细看声明:

public static PoseLocation fromByte (byte poseByte)

看到this这个词了吗?不,所以它不是扩展方法。它只是一个普通的静态方法,就像其他方法一样。调用静态方法需要把声明的class放在前面。在这种情况下,fromByte 是在 PoseLocationMethods 中声明的,因此您应该这样做:

PoselocationMethods.fromByte(1);

不过,我认为fromByte不属于PoseLocationMethodsclass。您可能想为 byte:

编写扩展方法
public static PoseLocation ToPoseLocation(this byte poseByte) {
    return (Poselocation)poseByte;
}

或者,摆脱这些 ToFrom 方法。我认为使用强制转换就足够清楚了。