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

Fir*_*gon 13 c# enums

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

所以我有一个枚举:

public enum MessageType
{
    Normal, 
    Error, 
    Chat, 
    Groupchat, 
    Headline
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

        //etc
    }

    return type;
}
Run Code Online (Sandbox Code Playgroud)

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

我想要的是能够做到这样的事情:

enum MessageType type = MessageType(JabberMessageType.groupchat);
// or 
enum MessageType type = MessageType.FromJabberJid(JabberMessageType.groupchat);
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*mer 14

为什么不创建一个扩展方法来为您执行此操作?

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

var type = JabberMessageType.normal; // JabberMessageType
var messageType = type.ConvertMessageType(); // Converted to your custom MessageType
Run Code Online (Sandbox Code Playgroud)