C# 无法将字符串隐式转换为int
在C#中,我使用Enum获取下拉值:C# 无法将字符串隐式转换为int,c#,enums,C#,Enums,在C#中,我使用Enum获取下拉值: class Enum { public enum Fields { AssignedTo = "Assigned To", CloseReason = "Close Reason", CustomerId = "Customer ID", CustomerName = "Customer Name", CompanyID = "Company ID"
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”
我已经删除了双引号,但仍然显示相同的错误。我做错了什么?这在c语言中是语法无效的# 在c中创建字符串枚举需要解决方法#
它给出此错误是因为默认情况下,枚举希望您为枚举内的字段分配一个整数值
public enum Fields
{
AssignedTo = 1,
CloseReason = 2,
CustomerId = 3,
CustomerName = 4,
CompanyID = 5,
CompanyName = 6
}
如果跳过赋值部分,默认情况下,它将开始赋值从整数0开始的字段。在C#string中不允许使用枚举类型
引用自MSDN
批准的枚举类型有byte、sbyte、short、ushort、int、,
uint、long或ulong
If必须进行某种转换(即使用[DisplayName]属性)才能在下拉列表中使用enum。我不确定这是否是因为您试图向enum显示字符串,然后是因为enum仅使用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 ,
}
}
我认为您不想使用enum作为下拉列表。尝试查看字典、数据表或其他结构。如果你能详细告诉我们你到底想做什么,也许我们能帮上忙 编辑:下面是一个使用
列表
作为组合框
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;
List dsList=new List();
dsList.Add(“分配给”);
添加(“关闭原因”);
添加(“客户ID”);
dsList.Add(“客户名称”);
dsList.Add(“公司ID”);
dsList.Add(“公司名称”);
comboBox1.DataSource=dsList;
此外,您还可以根据要向用户显示的选项动态更改列表该语法是从何处获得的?您不能使用带有字符串值的枚举,请使用constantsIn c#(与Java不同),您可以为枚举值设置字符串。枚举值只能是数字(int16,int32)这是我的一段代码..另请参见:我有4个下拉选项。。例如,如果我使用public const string AssignedTo和下拉选项,那么它会显示其他下拉选项的值,这些选项可能也不相关。如果我在Enum中给出这个,它会限制该选项。例如,如果我使用Close Reason,我应该只看到Close Reason的下拉值,而不是其他值。。我正在尝试这个逻辑。仍然不确定您到底想做什么,但我在我的答案中添加了一个示例-您可以尝试使用列表作为控件的数据源。希望它能把你推向正确的方向。