无法从字符串隐式转换为int

时间:2016-04-20 06:01:51

标签: c# enums

在C#中,我使用Enum来获取下拉值:

class Enum
{
    public enum Fields
    {       
        AssignedTo = "Assigned To",
        CloseReason = "Close Reason",
        CustomerId = "Customer ID",
        CustomerName = "Customer Name",
        CompanyID = "Company ID",
        CompanyName = "Company Name",
    }
}

当我构建解决方案时。我收到错误:无法隐式转换类型' string'到' int'。

我删除了双引号,但仍显示相同的错误。我做错了什么?

5 个答案:

答案 0 :(得分:2)

在C#字符串中,枚举不允许使用类型。

引自MSDN https://msdn.microsoft.com/en-us/library/sbbt4032.aspx

  

枚举的已批准类型是byte,sbyte,short,ushort,int,   uint,long或ulong

如果必须进行某种转换(即使用[DisplayName]属性)以在下拉列表中使用枚举。

答案 1 :(得分:0)

答案 2 :(得分:0)

它给出了这个错误,因为默认情况下,枚举要求你为枚举中的字段分配一个整数值。

public enum Fields
{       
    AssignedTo = 1,
    CloseReason = 2,
    CustomerId = 3,
    CustomerName = 4,
    CompanyID = 5,
    CompanyName = 6
}

如果跳过赋值部分,它将默认开始分配从整数0开始的字段。

答案 3 :(得分:0)

我不确定是不是因为你试图将字符串显示到枚举然后是因为枚举只使用int 16和32所以我们必须创建一个扩展来使它显示字符串然后使用int值来调用它

using System.Reflection;

  public static class EnumExtensions
{

    public static string DisplayName(this Enum value)
    {
        FieldInfo field = value.GetType().GetField(value.ToString());

        EnumDisplayNameAttribute attribute
                = Attribute.GetCustomAttribute(field, typeof(EnumDisplayNameAttribute))
                    as EnumDisplayNameAttribute;

        return attribute == null ? value.ToString() : attribute.DisplayName;
    }
}

public class EnumDisplayNameAttribute : Attribute
{
    private string _displayName;
    public string DisplayName
    {
        get { return _displayName; }
        set { _displayName = value; }
    }
}
class Enum
  {
         public enum Fields
{       
    [EnumDisplayName(DisplayName = "Assigned To"
    AssignedTo,
    [EnumDisplayName(DisplayName = "Close Reason"
    CloseReason,
    [EnumDisplayName(DisplayName = "Customer ID"
    CustomerId,
    [EnumDisplayName(DisplayName = "Customer Name"
    CustomerName,
    [EnumDisplayName(DisplayName = "Company ID"
    CompanyID,
    [EnumDisplayName(DisplayName = "Company Name"
    CompanyName ,
}
}

just like i did for my group description for listview

答案 4 :(得分:0)

我认为你不想使用enum进行下拉。尝试查看Dictionary或DataTable或其他一些结构。如果您向我们提供有关您究竟要做什么的更多详细信息,我们可以提供帮助。

编辑:以下是使用List<string>作为ComboBox

数据源的简单示例
List<string> dsList = new List<string>();
dsList.Add("Assigned To");
dsList.Add("Close Reason");
dsList.Add("Customer ID");
dsList.Add("Customer Name");
dsList.Add("Company ID");
dsList.Add("Company Name");

comboBox1.DataSource = dsList;

此外,您可以根据要向用户显示的选项动态更改列表