c# - 向枚举添加构造函数(或函数)

标签 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);

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

最佳答案

为什么不创建一个 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

关于c# - 向枚举添加构造函数(或函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8079190/

相关文章:

c# - 如果我首先获得属性, Entity Framework 只会将相关实体属性设置为 "null"

c# - DataTable 计算值对于 Int32 类型来说太大或太小

c++ - 在 C++ 中调用带括号的枚举/枚举类时发生了什么?

c# - 类型 'MyEnum' 的表达式不能用于类型的参数

c# - 使用 svcutil 为 3 个服务生成服务客户端

c# - Windows Mobile 应用程序中 DataGrid 的 AutoSizeColumnsMode

javascript - 添加默认值以使用 Angular 2 选择

java - 如何在 Java 中将一个值从一个枚举转换为另一个?

swift - 创建带参数的枚举

c++ - 新的类型安全枚举是否定义为从 0 开始?