无法将类型“TEnum”转换为“int”

2024-02-19

我正在尝试将枚举转换为列表,如中所述this https://stackoverflow.com/questions/3489453/how-can-i-convert-an-enumeration-into-a-listselectlistitem例子 例如

Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem {
    Text = v.ToString(),
    Value = ((int)v).ToString()
}).ToList();

这项工作有效,但我想修改它以与通用枚举一起使用

public static List<SelectListItem> GetEnumList<TEnum>(TEnum value)
{

        return Enum.GetValues(typeof(TEnum)).Cast<TEnum>().Select(v => new SelectListItem
        {
            Text = v.ToString(),
            Value = ((int)v).ToString()
        }).ToList();
 }

然而上面的代码没有编译并给出

无法将类型“TEnum”转换为“int”

对于线

  Value = ((int)v).ToString()
  1. 我该如何修复上面的代码。

  2. 为什么它会给出通用枚举的编译错误,而不是普通枚举的编译错误


编辑:我已经尝试了线程中的建议,但出现了进一步的错误:

这是我的完整代码:

public static IHtmlContent EnumDropDownListFor<TModel, TResult,TEnum>(
    this IHtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TResult>> expression,
    TEnum enumValue,
    string optionLabel) 
{
    return htmlHelper.DropDownListFor(expression, (IEnumerable<SelectListItem>)GetEnumList(enumValue), optionLabel);
}

public static List<SelectListItem> GetEnumList<TEnum>(TEnum value) 
{
    return Enum.GetValues(typeof(TEnum)).Cast<TEnum>().Select(v => new SelectListItem
    {
        Text = v.ToString(),
        Value = Convert.ToInt32(v).ToString()
    }).ToList();

}

但我收到运行时错误

ArgumentException:提供的类型必须是枚举。

参数名称:枚举类型

在线上

return Enum.GetValues(typeof(TEnum)).Cast<TEnum>().Select(v => new SelectListItem
    {
        Text = v.ToString(),
        Value = Convert.ToInt32(v).ToString()
    }).ToList();

我需要在代码中修复什么才能避免出现运行时错误。


你没有告诉编译器任何关于TEnum。就其而言,它可以是字符串、日期时间、银行帐户、项目符号或任何内容。

为了让它工作,你可以使用Enum.Parse and Convert.ToInt32

UPD:让我格式化注释中的代码并修复 SO-copy-pasters 的编译错误:D

public static int GetEnumIntValue<T>(T value)
    where T : struct
{
    Type genericType = typeof(T);
    Debug.Assert(genericType.IsEnum);
    Enum enumValue = Enum.Parse(genericType, value.ToString()) as Enum;
    return Convert.ToInt32(enumValue);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法将类型“TEnum”转换为“int” 的相关文章

随机推荐

  • 为什么不推荐react-router v6中的HashRouter?

    在每一个react routerv6 文档页面提到HashRouter有一个简短的警告文本指出不建议使用这种路由 没有解释为什么 有没有major缺点 它会以某种方式破坏任何 api 吗 简短的回答 一些开发人员认为哈希路由会产生 丑陋 的
  • 向skimage中的regionprops添加额外的属性

    我正在使用regionprops函数从scikit image or skimage 包使用同一包中的 SLIC 超像素算法来计算分割图像的区域特征 除了函数中计算的特征之外 我还需要其他特征 主要是 标准差 偏度 峰度 我修改了源代码 r
  • 在头文件中初始化可定制结构的向量

    有没有办法获得全局结构列表并在同一头文件中初始化包含它们的修改版本的向量 我知道我无法直接访问和编辑 h 文件中的变量 因为它不是运行时代码 但也许恰好有一个解决方法 或者可能是我碰巧跳过的一些非常基本的方法C 初学者手册 如果是的话请原谅
  • Android 在 webview 中启用后退按钮

    我正在使用以下代码在我的 Android 应用程序中显示 Web 视图 package com company myapp import com google android apps analytics GoogleAnalyticsTr
  • 许可方案、防欺骗和撤销功能

    这是我的第一个问题 所以请温柔一点 我正在开发一个软件 我想使用某种许可方案来保护该软件 一个基本方案是为用户生成一些 唯一 密钥 用户在想要注册该软件时发送该密钥和注册码并收到激活码 当应用程序运行时 它通过比较 唯一 密钥和通过解密激活
  • 从独立存储中的图像设置辅助平铺背景图像

    这是我从图像网址获取流的方法 using var httpClient new HttpClient response await httpClient GetStreamAsync new Uri IMAGEURL HERE UriKin
  • 在 T-SQL 中将特定 BigInt 转换为 DateTime

    我有 bigInt 635307578922100000我需要转换成DateTime 我尝试了几种方法来做到这一点 SELECT DATEADD S CONVERT bigint 635307578922100000 1000 CONVER
  • SPSite 站点 = new SPSite(SPContext.Current.Web.Url) 与 SPContext.Current.Web.Site

    为什么某些 SharePoint 示例使用 using SPSite site new SPSite SPContext Current Web Url 而不仅仅是简单地 SPSite site SPContext Current Web
  • 如何使用DELPHI更改Android设备通知中的小图标图像

    有没有办法用Delphi更改Android应用程序通知中的小图标图像 默认使用的应用程序图标 轻松创建通知的标准方法是 var aNotification TNotification begin aNotification aNotific
  • 在C++中查找进程中加载​​的DLL的内存地址

    我有一个正在使用 Test dll 的正在运行的进程 我想知道内存中 Test dll 开始的确切内存位置 但似乎无法 我的主要问题是我需要写入此 DLL 的偏移量 但当我使用 Read WriteProcessMemory 时 我无法准确
  • 为什么 MassTransit 消息传递中不允许使用结构体?

    消费者界面在MassTransit所有人都期望消息模型是类而不是结构 由于它们都是内部接口 我必须说那里的设计非常好 这是显示约束的通用容器类 直接获取从源代码来看 https github com MassTransit MassTran
  • C++ 打印当前函数输入参数类型、名称和值

    我正在寻找一种允许记录函数输入参数的功能 例如 void func std string input name const int n print current function s inputs type name and value
  • 获取 i18next 以回退到“无翻译”

    如果没有找到该键的翻译 默认情况下 i18next 翻译库似乎会回退到翻译键 例如 No translation defined for CANCEL yet i18next t CANCEL Returns CANCEL 如果没有找到该密
  • 如何动态创建变量? [复制]

    这个问题在这里已经有答案了 我想在Python中动态创建变量 有没有人有任何创造性的方法来做到这一点 除非非常需要创建一堆变量名称 否则我只会使用字典 您可以在其中动态创建键名称并将值与每个名称相关联 a k 0 while k lt 10
  • 将一组 NumPy 数组传递到 C 函数中进行输入和输出

    假设我们有一个 C 函数 它接受一组一个或多个输入数组 处理它们 并将其输出写入一组输出数组 签名如下所示 count表示要处理的数组元素的数量 void compute int count float input float output
  • 使用 Webpack 和 ES6 的 Fine Uploader

    我正在尝试将 Fine uploader 与通过 Webpack 捆绑的 React ES6 应用程序集成 寻找有关如何将精细上传器包含在此堆栈中的指导 In my webpack config js我为 Fine Uploader 设置了
  • 在javascript中使用单引号传递变量

    我对链接进行了 onClick 调用 a this is working good 问题是 fomateName 内的变量将包含单引号 而我的 fomateName 采用如下变量 var a Andrew D souza 需要格式化用单引号
  • 定义指向 const 字符串的 const 指针

    阅读了 Ulrich Drepper 的博文 发现两个条目看起来相互矛盾 In the 第一 http udrepper livejournal com 13851 html 全局空间中的字符串 Ulrich 指出该字符串应定义为 cons
  • Linux下如何用C写文件?

    我想重写Linux的 cp 命令 所以这个程序会像这样工作 a out originalfile copiedfile 我可以打开文件 创建新文件 但无法写入新文件 什么也没写 可能是什么原因 当前的C代码是 include
  • 无法将类型“TEnum”转换为“int”

    我正在尝试将枚举转换为列表 如中所述this https stackoverflow com questions 3489453 how can i convert an enumeration into a listselectlisti