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
不属于PoseLocationMethods
class。您可能想为 byte
:
编写扩展方法
public static PoseLocation ToPoseLocation(this byte poseByte) {
return (Poselocation)poseByte;
}
或者,摆脱这些 To
和 From
方法。我认为使用强制转换就足够清楚了。
我正在尝试向 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
不属于PoseLocationMethods
class。您可能想为 byte
:
public static PoseLocation ToPoseLocation(this byte poseByte) {
return (Poselocation)poseByte;
}
或者,摆脱这些 To
和 From
方法。我认为使用强制转换就足够清楚了。