将字符串转换回枚举

2023-11-29

有没有更干净、更聪明的方法来做到这一点?

我正在访问数据库来获取数据来填充对象,并将数据库字符串值转换回其枚举(我们可以假设数据库中的所有值确实是匹配枚举中的值)

有问题的行是下面设置 EventLog.ActionType 的行...我开始质疑我的方法的原因是因为在等号之后,VS2010 不断尝试通过输入以下内容来覆盖我正在输入的内容:“= EventActionType(”

using (..<snip>..)
{
  while (reader.Read())
  {
     // <snip>
     eventLog.ActionType = (EventActionType)Enum.Parse(typeof(EventActionType), reader[3].ToString());

...etc...

据我所知,这是最好的方法。我已经设置了一个实用程序类来使用使其看起来更干净的方法来包装此功能。

    /// <summary>
    /// Convenience method to parse a string as an enum type
    /// </summary>
    public static T ParseEnum<T>(this string enumValue)
        where T : struct, IConvertible
    {
        return EnumUtil<T>.Parse(enumValue);
    }

/// <summary>
/// Utility methods for enum values. This static type will fail to initialize 
/// (throwing a <see cref="TypeInitializationException"/>) if
/// you try to provide a value that is not an enum.
/// </summary>
/// <typeparam name="T">An enum type. </typeparam>
public static class EnumUtil<T>
    where T : struct, IConvertible // Try to get as much of a static check as we can.
{
    // The .NET framework doesn't provide a compile-checked
    // way to ensure that a type is an enum, so we have to check when the type
    // is statically invoked.
    static EnumUtil()
    {
        // Throw Exception on static initialization if the given type isn't an enum.
        Require.That(typeof (T).IsEnum, () => typeof(T).FullName + " is not an enum type.");
    }

    public static T Parse(string enumValue)
    {
        var parsedValue = (T)System.Enum.Parse(typeof (T), enumValue);
        //Require that the parsed value is defined
        Require.That(parsedValue.IsDefined(), 
            () => new ArgumentException(string.Format("{0} is not a defined value for enum type {1}", 
                enumValue, typeof(T).FullName)));
        return parsedValue;
    }

    public static bool IsDefined(T enumValue)
    {
        return System.Enum.IsDefined(typeof (T), enumValue);
    }

}

通过这些实用方法,您可以直接说:

 eventLog.ActionType = reader[3].ToString().ParseEnum<EventActionType>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将字符串转换回枚举 的相关文章

随机推荐

  • 如何在CKEditor 5中启用图像上传支持?

    我将在我的项目中使用 ckeditor v5 我尝试使用图像插件 但没有找到足够的信息 如果你看到德莫here 您可以通过拖放轻松上传图像 但是 当我尝试使用下载 ballon zip 进行拖放图像时 没有任何反应 也没有错误 有没有办法在
  • 如何在 WildFly 10 中动态更改 JMS 队列 MDB 池大小

    我正在使用 WildFly 10 1 它随 Artemis 作为新的 JMS 提供程序提供 但我无法找到如何动态更改特定 MDB 的消费者线程数 我有一个队列和一个使用队列中消息的消息侦听器 MDB 现在我想动态控制域必须启动的最大消费者线
  • C# 在 VSTO 加载项中获取正在运行的 Outlook 实例

    我正在尝试在 Excel 加载项中获取 Outlook 应用程序对象 如果有正在运行的 Outlook 实例 它应该得到这一点 如果没有 它应该使用 Outlook 对象模型创建一个 这是我现在的代码 public static Outlo
  • 从Field中获取值,发送到db函数,将值返回到Field

    我有一个工作指示在马克西莫 工单应用程序具有自定义字段 FieldA 你好 FieldB 我想从中获取价值FieldA并将其传递给function在 Oracle 数据库中 CREATE OR REPLACE function hello
  • 连接被拒绝 postgres docker

    我用 spring boot spring jpa 数据制作了一个小应用程序 它连接到 dockerized postgres 实例 即使我尝试通过以下方式连接 它也工作得很好 psql 到 dockerized postgres 实例中
  • 自动选中 woocommerce 登录表单上的“记住我”框?

    如何自动选中 woocommerce 登录表单上的 记住我 框 p class form row p
  • 在 Windows XP 中将剪贴板传递给批处理

    使用 Windows XP 我想将文本 URL 复制到剪贴板 然后运行将使用该 URL 的批处理文件 我知道如果 Clip exe 漂浮在周围 则相反的情况也是可能的 我用我自己的CLIPTEXT程序 这是一个非常简单的 5 行 pasca
  • 将命令的输出存储在 Bash 变量中。输出正在运行而不是存储

    我试图将 Bash 中命令的输出存储在变量中 但不是存储输出 而是将其解释为命令并运行 那不是我想要的 tmp line awk print 1 这将运行输出awk作为命令 echo line awk print 1 这会打印出我想要存储在
  • Oreo 8.0 中的推送通知问题

    将应用程序更新到 8 1 后 未显示通知 我修复了它 现在 待处理的意图没有按预期工作 收到通知后 如果应用程序在后台 我将无法导航到该应用程序 并且如果它已关闭 则不会启动 private void sendNotify String m
  • Yaml 架构验证 powershell

    我正在与powershell yaml将我的 YAML 解析为 PowerShell 对象 目前 我在验证 YAML 架构时遇到问题 我用过这个包yaml 架构验证器对于我的 javascript 项目 我找不到任何熟悉的函数 模块来帮助我
  • 使用 Python 中的 PIL 或 OpenCV 将图像粘贴到两个给定坐标处的另一图像,并更改不透明度

    我有两个具有给定点的图像 每个图像一个点 需要对齐 以便结果图像是两个图像的总和 而图像 2 以 40 的不透明度粘贴在图像 1 上 我已经采取了这个question考虑在内 但我们的情况并不完全匹配 因为图像坐标是由用户提供的 并且图像可
  • Linux 中从 EBCDIC 到 UTF8 的转换

    我已经使用 Perl 从我们的数据库 AS 400 DB2 导入了一个表 问题在于该字符串是用 EBCDIC Latin 1 意大利语 编码的 如何在 Linux bash 中将生成的文件转换为纯 utf 8 从 开始 iconv f EB
  • 使用 XML 文件将 url 参数传递给 Zend_Navigation

    我正在使用 Zend Framework 1 10 8 我想在我的layout phtml 中创建一个面包屑部分 我的菜单中有一些链接具有动态 url 参数 例如http mydomain com editor edit id 42 我试图
  • 在 Python 中复制 Javascript 按位运算

    我正在尝试在 Python 中复制一个简单的按位 Javascript 操作 Javascript gt 0xA867Df55 2825379669 gt 0xA867Df55 0 1469587627 Python gt gt gt 0x
  • WP7 可以发送 HTML 邮件吗?

    WP7 可以发送 HTML 电子邮件吗 我可能忽略了它 但 EmailComposeTask 中似乎没有用于指定这一点的参数 尽管该设备能够接收和显示 HTML 电子邮件 EmailComposeTask不提供 API 来让您发送 HTML
  • openpyxl - 能够从图表中删除边框吗?

    使用 openpyxl 插入到我的工作表中的图表有边框 有没有办法通过 styles Style styles borders 模块将图表 饼图 条形图 的样式设置为没有边框 或者至少设置一个细白色边框 以便它们可以无边框打印 我在该对象上
  • 目前 Windows 上的 Git 存在哪些问题

    我想下载 msysgithere 它这样说 msysGit 项目没有足够的贡献者来提供商业级支持 如果您没有办法解决您的问题 可能有来自 msysGit 邮件列表的宝贵建议 或者吸引人们谁能解决它们 你的问题就不太可能得到解决 这听起来令人
  • 使用预编译的 Azure 函数库生成错误

    最近 我转换了一个使用 C 脚本的 Azure 函数 csx 到预编译的类库 使用适用于 Azure Functions 的 Visual Studio Studio 工具 它在 Visual Studio 2017 中成功构建 以及运行和
  • 重复,但仍然使用标准输出

    我可以施展一些魔法吗dup2 or fcntl 这样我将 stdout 重定向到一个文件 即 写入描述符 1 的任何内容都会转到一个文件 但是如果我使用其他机制 它会转到终端输出吗 如此松散 int original stdout some
  • 将字符串转换回枚举

    有没有更干净 更聪明的方法来做到这一点 我正在访问数据库来获取数据来填充对象 并将数据库字符串值转换回其枚举 我们可以假设数据库中的所有值确实是匹配枚举中的值 有问题的行是下面设置 EventLog ActionType 的行 我开始质疑我