[英]Parameter Enums in C#
我曾经使用Java编程,但是对于该项目,我应该使用C#,但是我试图将我的Packet系统从Java项目转换过来,但是使用C#编译器却遇到了一些问题。 这是代码。
abstract class Packet
{
public static enum PacketTypes
{
INVALID(-1), LOGIN(00);
private int packetId;
private PacketTypes(int packetId)
{
this.packetId = packetId;
}
public int getId() { return packetId; }
}
}
实际上,这正是在Java代码中完成的方式,而且我让各个数据包扩展了Packet类。 我试图弄清楚如何使所有这些在C#中融合在一起。 也许每个数据包都有一个单独的类不是这里应该做的方式吗?
我不确定您要实现的目标,但是可以为C#中的特定enum
元素设置值:
public enum PacketTypes
{
INVALID = -1;
LOGIN = 0;
}
由于默认情况下enum
由int
支持,因此您可以将它从int
为int
而无需其他代码。
C#中的enum
不能满足任何成员的要求,因此不能将方法/属性/字段添加到enum
声明中。
与Java enum
是类的Java不同,在C#中enum
是纯值。 它们不能具有成员函数或字段。
一种可能有用的方法是为enum
定义扩展方法,如下所示:
public static class PacketTypesExtensions {
static readonly IDictionary<PacketTypes,int> IdForType = new Dictionary<PacketTypes,int> {
{ PacketTypes.INVALID, -1 }
, { PacketTypes.LOGIN, 0 }
};
static readonly IDictionary<PacketTypes,string> DescrForType = new Dictionary<PacketTypes,string> {
{ PacketTypes.INVALID, "<invalid packet type>" }
, { PacketTypes.LOGIN, "<user login>" }
};
public static string Description(this PacketTypes t) {
return DescrForType[t];
}
public static int Id(this PacketTypes t) {
return IdForType[t];
}
}
这使您可以保留Java语法:
PacketTypes pt = ... // <<== Assign a packet type here
int id = pt.Id(); // This calls the static extension method
string d = pt.Description();
除了Marcins答案,您还可以尝试一下。
public enum PacketTypes
{
INVALID = -1;
LOGIN = 0;
}
public class Packet
{
public PacketTypes PacketType { get; set;}
}
在您的代码中,您可以执行此操作
public void DoSomething()
{
var packet = new Packet();
packet.PacketType = PacketTypes.INVALID; // Assign packtype
Console.WriteLine(packet.PacketType.ToString()); // Retrieve and print
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.