如何在NET 3.5中使用TryParse for Enum值?

use*_*756 5 .net c# enums

我必须使用.NET 3.5,但想使用我知道属于.NET 4.0的TryParse方法.然后我在网上搜索了这个主题,我想我找到了[Simon Mourier的答案](/sf/answers/431320291/)中的最佳解决方案!

所以我创建了一个类似于我自己的类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace MyClasses
{

    public class MyEnum
    {
    // here goes all of Simons's code
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试在如下的新项目中使用该类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyClasses;

namespace MyEnumerations
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Type in a name: ");
            string userValue = Console.ReadLine();

            MyEnumeration myValue;

            if (MyEnum.EnumTryParse(myValue,userValue, out myValue))
            {
                switch (myValue)
                {
                    case MyEnumeration.Elem1:
                        Console.WriteLine("Elem1 caught!");
                        break;
                    case MyEnumeration.Elem2:
                        Console.WriteLine("Elem2 caught");
                        break;
                    case MyEnumeration.Elem3:
                        Console.WriteLine("Elem3 caught");
                        break;
                    default:
                        Console.WriteLine("Does not compute");
                        break;
                }
            }

            Console.ReadLine();

        }
    }

    enum MyEnumeration
    {
        Elem1,
        Elem2,
        Elem3
    }

}    
Run Code Online (Sandbox Code Playgroud)

但是我无法使用"EnumTryParse"方法获得正确的sintax:具体来说,似乎我无法正确传递第一个必须为"Type type"的参数.

当它出来时,我完全是C#的新手,我肯定知道我必须遗漏一些东西,一旦我得到正确的sintax,我会发挥我的头脑.但是现在我坚持了下来.

谢谢你的帮助

Jon*_*eet 5

正如错误消息所说,您需要将枚举的类型作为第一个参数传递.您还需要更改myValue匹配out参数的类型EnumTryParse,因此:

object myValue;
if (MyEnum.EnumTryParse(typeof(MyEnumeration), userValue, out myValue))
{
    MyEnumeration actualValue = (MyEnumeration) myValue;
    ...
}
Run Code Online (Sandbox Code Playgroud)

您可能还想考虑我的Unconstrained Melody项目,该项目允许:

MyEnumeration myValue;
if (Enums.TryParseName(userValue, out myValue))
{
    // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

或者使用显式类型参数:

MyEnumeration myValue;
if (Enums.TryParseName<MyEnumeration>(userValue, out myValue))
{
    // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

无约束的旋律有许多通用的方法,包括扩展方法,它允许所有这些在没有通常涉及的装箱和铸造的情况下完成.