如何发送和接收枚举参数

本文关键字:枚举 参数 何发送 | 更新日期: 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的道路上,我们使用了一种安静的方式。蒂恩森蒂多?