如何发送和接收枚举参数? 我有几个类型枚举,我想制作一个通用方法来获取描述
public enum Lista_Size
{
[Description("Chica")] Chica,
[Description("Grande")] Grande,
[Description("Extra Grande")] Extra_Grande,
}
public enum Lista_Color
{
[Description("Verde")] Verde,
[Description("Blanco Perla")] Blanco,
[Description("Rojo Fuerte")] Rojo_Strong,
}
我有这种方法来获取描述
private static IEnumerable<string> Descripcion_Referencia(Enum Referencia)
{
var Descripcion = new List<string>();
var Tipo = Referencia.GetType();
var Nombre = Enum.GetName(Tipo, Referencia);
var Campo = Tipo.GetField(Nombre);
var Campo_Descripcion = Campo.GetCustomAttributes(typeof(DescriptionAttribute), true);
foreach(DescriptionAttribute Atributo in Campo_Descripcion)
{
//MessageBox.Show("Atributo.Description: " + Atributo.Description);
Descripcion.Add(Atributo.Description);
}
return Descripcion;
}
我还有另外两个调用de方法Descripcion_Referencia的方法,这个方法我想让它变得通用。我想把它称之为:Cargar_Combo(Lista_Color);或Cargar_Combo(Lista_Size) 但如果我写公共虚空Cargar_Combo(枚举Lista)它表示错误¿我如何发送或接收它?
public void Cargar_Combo()
{
DataTable Dt_Combo = new DataTable();
Dt_Combo.Columns.Add("Value");
Dt_Combo.Columns.Add("Descripcion");
DataRow Dr_Combo = Dt_Combo.NewRow();
IEnumerable<string> Resultado;
Type Tipo = typeof(Gral_Constantes.Cat_Uti_Formatos_Apartados.Referencia_Catalogo_Sistema);
String[] Lista = Tipo.GetEnumNames();
for (int i = 0; i < Lista.Length; i++ )
{
Resultado = Descripcion_Referencia((Gral_Constantes.Cat_Uti_Formatos_Apartados.Referencia_Catalogo_Sistema)Enum.Parse(typeof(Gral_Constantes.Cat_Uti_Formatos_Apartados.Referencia_Catalogo_Sistema), Lista[i]));
Dr_Combo = Dt_Combo.NewRow();
Dr_Combo["Value"] = Lista[i];
Dr_Combo["Descripcion"] = Resultado.ElementAt(0);
Dt_Combo.Rows.Add(Dr_Combo);
}
Cmb_Catalogo.DataSource = Dt_Combo;
Cmb_Catalogo.DisplayMember = "Descripcion";
Cmb_Catalogo.ValueMember = "Value";
}
好的。我用Enum Type parameterName做了它,但是现在Type = typeof(参数)无法识别参数的名称并用红色加下划线。
public DataTable Cargar_Combo(Enum Parametro)
{
DataTable Dt_Referencia = new DataTable();
Dt_Referencia.Columns.Add("Nombre");
Dt_Referencia.Columns.Add("Descripcion");
DataRow Dr_Referencia = Dt_Referencia.NewRow();
IEnumerable<string> Resultado;
Type Tipo = typeof(Parametro); //Here error mark , does not recognize the name of the parameter
String[] Lista = Tipo.GetEnumNames();
for (int i = 0; i < Lista.Length; i++)
{
Resultado = Descripcion_Referencia((Parametro)Enum.Parse(typeof(Parametro), Lista[i]));
Dr_Referencia = Dt_Referencia.NewRow();
Dr_Referencia["Value"] = Lista[i];
Dr_Referencia["Descripcion"] = Resultado.ElementAt(0);
Dt_Referencia.Rows.Add(Dr_Referencia);
}
}
非常感谢你的帮助。我提供了最后一段代码,希望我已经适当地实施,及时服务,但我有另一个问题。
我有另一种方法来描述枚举值,发送表单的时间不接受enum修复使用的转换。
//Add this line<Parametro_Referencia>() where Parametro...
public DataTable Carga_Referencias<Parametro_Referencia>() where Parametro_Referencia : struct, IConvertible
{
DataTable Dt_Referencia = new DataTable();
Dt_Referencia.Columns.Add("Nombre");
Dt_Referencia.Columns.Add("Descripcion");
DataRow Dr_Referencia = Dt_Referencia.NewRow();
IEnumerable<string> Resultado;
Type Tipo = typeof(Parametro_Referencia); //Here error mark , does not recognize the name of the parameter
String[] Lista = Tipo.GetEnumNames();
for (int i = 0; i < Lista.Length; i++)
{
Resultado = Descripcion_Referencia((Parametro_Referencia)Enum.Parse(typeof(Parametro_Referencia), Lista[i]));
Dr_Referencia = Dt_Referencia.NewRow();
Dr_Referencia["Value"] = Lista[i];
Dr_Referencia["Descripcion"] = Resultado.ElementAt(0);
Dt_Referencia.Rows.Add(Dr_Referencia);
}
行Resultado = Descripcion_Referencia((Parametro_Referencia)Enum.Parse(typeof(Parametro_Referencia),Lista [i]))我遇到了问题。不会重新认识这种转换。
获得描述的metoho是。
private static IEnumerable<string> Descripcion_Referencia(Enum Referencia)
{
var Descripcion = new List<string>();
var Tipo = Referencia.GetType();
var Nombre = Enum.GetName(Tipo, Referencia);
var Campo = Tipo.GetField(Nombre);
var Campo_Descripcion = Campo.GetCustomAttributes(typeof(DescriptionAttribute), true);
foreach (DescriptionAttribute Atributo in Campo_Descripcion)
{
Descripcion.Add(Atributo.Description);
}
return Descripcion;
}
return Dt_Referencia;
}
您会知道如何转换或更正运费吗?
答案 0 :(得分:0)
枚举在C#中很奇怪 - 它们是类型,类型,而且C#不允许你将类型作为参数传递。我之前写了一些东西将枚举转换为字典;也许这个例子将有助于向您展示如何处理枚举参数。我花了一段时间才弄清楚自己:)
public class EnumConverter
{
public static Dictionary<string, int> EnumToDict<TEnum>() where TEnum : struct, IConvertible
{
Type enumType = typeof (TEnum);
if (!enumType.IsEnum)
throw new ArgumentException("T must be an enum.");
return Enum.GetValues(typeof (TEnum))
.Cast<TEnum>()
.ToDictionary(t => t.ToString(), t => t.ToInt32(null /* 'culture' */));
}
}
(enespañol!)
En lugar de ToDictionary
,se puede utilizar cualquier metodo que quieres。 Tiene sentido?