建议 - 如何使用不同的参数实现相同的代码

时间:2014-03-12 12:04:54

标签: c# .net wpf enums

我想要一个建议。我的项目有很多等于具有不同值的方法,我想做一个相同的方法。

方法是这样的:

private void Enum1()
{   
    Console.WriteLine(Enum.GetValue(ENUM1.Code));
    Console.WriteLine(Enum.GetValue(ENUM1.Info));
}

private void Enum2()
{   
    Console.WriteLine(Enum.GetValue(ENUM2.Code));
    Console.WriteLine(Enum.GetValue(ENUM2.Info));
}

private void Enum3()
{   
    Console.WriteLine(Enum.GetValue(ENUM3.Code));
    Console.WriteLine(Enum.GetValue(ENUM3.Info));
}

这是枚举:

public enum ENUM1
{
    Code = 1,
    Info = 3
}

public enum ENUM2
{
    Code = 91,
    Info = 4
}

public enum ENUM3
{
    Code = 6,
    Info = 27
}

只有一种方法可以通过插入要使用的枚举输入类型来创建方法吗?也许是一个类似的解决方案:

private void General("ENUM1")
{   
    var type = ENUM1;

    switch (p)
    {
        case "ENUM1":
            type = ENUM1;
        case "ENUM2":
            type = ENUM2;
        case "CASALINGHI":
            type = ENUM3;

        default:
            type = ENUM1;
        }

    Console.WriteLine(Enum.GetValue(type.Code));
    Console.WriteLine(Enum.GetValue(type.Info));
}

2 个答案:

答案 0 :(得分:2)

我认为这就是你要找的东西:

private void General<T>()
{
   var values = Enum.GetValues(typeof(T));
   foreach(var value in values)
       Console.WriteLine(value);
}

General<Enum1>();
General<Enum2>();
General<Enum3>();

或者这取决于你想要如何使用它:

private void General(Type enumType)
{
   var values = Enum.GetValues(enumType);
   foreach(var value in values)
       Console.WriteLine(value);
}

General(typeof(Enum1));
General(typeof(Enum2));
General(typeof(Enum3));

答案 1 :(得分:0)

为什么在使用类时可以继续使用枚举?阅读更多关于面向对象的编程。

创建一个单独的类:

public class MyEnum
{
    public int Code
    {
        get; set;
    }
    public int Info
    {
        get; set;
    }

    public string Display()
    {
        Console.WriteLine(this.Code);
        Console.WriteLine(this.Info)
    }

    //
    // This will keep your enums static, available from any method
    //
    private static List<MyEnum> _globals = new List<MyEnum();

    public static List<MyEnum> Globals ()
    {
        if (this._globals.Count == 0)
        {
            this._globals.Add(new MyEnum(){ Code = 1, Info = 3 });
            this._globals.Add(new MyEnum(){ Code = 91, Info = 4 });
            this._globals.Add(new MyEnum(){ Code = 6, Info = 27 });
        }

        return this._globals;
    }
}

在此之后,您可以使用以下代码轻松打印出所有枚举:

foreach (MyEnum* en in MyEnum.Globals())
{
    en.Display();
}

请查看与此类似的解决方案,因为您的枚举显然代表了一些数据。