最近做一个项目,本来是传进来一个string的参数,用switch去判断然后做不同的操作,但要求我们不要用字符串去case。我想问一下,怎么定义一个枚举去代替,把传进来的string参数转换为枚举?

解决方案 »

  1.   

    enum SomeType
    {
        Type1, Type2, Type3
    };void foo(SomeType type)
    {
        switch (type)
        {
            SomeType.Type1: ...; break;
            SomeType.Type2: ...; break;
            SomeType.Type3: ...; break;
        }
    }
      

  2.   

    那用枚举就多此一举了。
    实在要写这么写:
    void foo(string type)
    {
        string[] a = { "type1", "type2", "type3" };
        SomeType[] b = { SomeType.Type1, SomeType.Type2, SomeType.Type3 };
        var query = a.Zip(b, (x, y) => new { x, y }).SingleOrDefault(x => x.x == type);
        if (query == null) //不是正确的类型
            return;
        SomeType yourType = query.y;
        switch (yourType)
        {
           ...
        }
    }
      

  3.   

    里面不知道这个枚举,当然就不能用这个枚举了,
    不知道你不用string的目的是什么
      

  4.   

    用Enum.Parse把字符串转换成枚举,当然前提是枚举值要和传入的字符串相同。
      

  5.   

    这种需求不太合理了,使用枚举代替字符串就是为了限定有效值的范围,但是又不知道枚举的类型,还有一种办法就是参数还是字符串,但是传参的时候使用还是使用枚举,只是传递的是枚举的字符串而不是枚举本身,这样既能保证限定了参数有效值的范围,又能解决参数不认识枚举的情况,当然了,参数里面的switch还是用字符串类型
      

  6.   


        public enum Weekend
        {
            Monday,
            Tuesday,
            Friday,
        }        public void Test(string week)
            {
                Weekend weekend = (Weekend)Enum.Parse(typeof(Enum), week, false);//转换一下            switch (weekend)
                {
                    case Weekend.Monday:
                        Console.WriteLine("Today is Monday");
                        break;
                    case Weekend.Tuesday:
                        Console.WriteLine("Today is Tuesday");
                        break;
                    case Weekend.Friday:
                        Console.WriteLine("Today is Friday");
                        break;
                    default:
                        break;
                }
            }