如何发送和接收枚举参数
本文关键字:枚举 参数 何发送 | 更新日期: 2023-09-27 18:24:44
如何发送和接收枚举参数?我有几个类型的枚举,我想做一个通用的方法来获得描述
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方法Description_Referencia,我想让这个方法通用化。我想称之为:Cargar_Combo(Lista_Color);或Cargar_Combo(Lista_Size)但是如果我写公共void Cargar_Combo(enum-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(Parameter)无法识别参数的名称,并用红色下划线将其下划线
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);
}
}
非常感谢你的帮助。我提供了最后一个代码,我希望我已经适当地实现了,及时送达,但我有另一个问题。
我有另一种方法来描述枚举值,并且发送表单的时间不接受与固定枚举一起使用的转换。
//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=Description_Referencia((Parametro_Referencia)Enum.Parse(类型为(Parametron_Referencia),Lista[i])行中,我遇到了一个问题。不会重新对此转换进行信号化。
得到描述的方法就是这样。
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;
}
您将知道如何转换或更正运费?
枚举在C#中很奇怪——它们有点像类型,而C#实际上不允许将类型作为参数传递。我不久前写了一些东西,将枚举转换为字典;也许这个例子将有助于向您展示如何处理enum参数。我花了一段时间才弄清楚自己:)
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' */));
}
}
(西班牙语!)
在ToDictionary
的道路上,我们使用了一种安静的方式。蒂恩森蒂多?