我必须使用.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,我会发挥我的头脑.但是现在我坚持了下来.
谢谢你的帮助
正如错误消息所说,您需要将枚举的类型作为第一个参数传递.您还需要更改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)
无约束的旋律有许多通用的方法,包括扩展方法,它允许所有这些在没有通常涉及的装箱和铸造的情况下完成.
| 归档时间: |
|
| 查看次数: |
428 次 |
| 最近记录: |