将构造函数(或函数)添加到枚举

时间:2011-11-10 12:01:22

标签: c# enums

我不确定构造函数是否正是我正在寻找的但如果我解释我想要做什么希望有人可以告诉我,如果我想做的是一个愚蠢的想法或是否有办法做到这一点

所以我有一个枚举:

public enum MessageType
{
    Normal, 
    Error, 
    Chat, 
    Groupchat, 
    Headline
}

这个枚举基本上是jabber.net MessageType的包装器。所以我想从中创建我的枚举。所以目前我有这样的功能:

private MessageType ConvertMessageType(JabberMessageType jabberType)
{
    MessageType type = MessageType.Error;

    switch (jabberType)
    {
        case JabberMessageType.normal:
            type = MessageType.Normal;
            break;

        //etc
    }

    return type;
}

所以我必须使用enum MessageType type = ConvertMessageType(JabberMessageType.groupchat);

我希望能做的事情是:

enum MessageType type = MessageType(JabberMessageType.groupchat);
// or 
enum MessageType type = MessageType.FromJabberJid(JabberMessageType.groupchat);

因此转换属于枚举,而不是外部的方法。

4 个答案:

答案 0 :(得分:14)

为什么不为你创建一个extension method呢?

public static class ExtensionMethods
{
    public static MessageType ConvertMessageType(this JabberMessageType jabberType)
    {
        switch(jabberType)
        {
            case JabberMessageType.normal:
                return MessageType.Normal;
            // Add rest of types here.
            default:
                return MessageType.Error;
        }
    }
}

使用示例:

var type = JabberMessageType.normal; // JabberMessageType
var messageType = type.ConvertMessageType(); // Converted to your custom MessageType

答案 1 :(得分:4)

你不能这样做。 Enumeration Type转换为int(或bytesbyteshortuintlong或{{1}如果指定的话)值并且在技术上不是ulong

  

枚举类型(也称为枚举或枚举)提供了一个   定义一组可能的命名积分常量的有效方法   分配给变量。

一种解决方案是在class类中使用静态方法来执行此操作。

Utilities

答案 2 :(得分:1)

你的枚举嵌套的类怎么样? 像这样的东西

public static class Message
{
    public enum Types
    {

    }

    public static Message.Types ConvertMessageType(Message.Types jabberType)
    {
    }
}

答案 3 :(得分:0)

您可以编写一个简单的单行程序,以后需要更少的调整(如果添加了更多的枚举值),但这假设,两种类型的枚举名称相同:

private MessageType ToMessageType(this JabberMessageType jabberType)
{
    return Enum.Parse(typeof(MessageType), jabberType.ToString(), true);
}

这是一种映射功能,从一种类型到另一种类型。