如何将提取的字符串用作已存在的枚举对象名称?

时间:2018-05-08 08:42:31

标签: c# .net enums

所以,

为了清楚起见,我已经查看了this Q& A,这不是我的问题。

现在,我的问题是,我有一个字符串,我可以从Excel中提取并通过拆分和其他方法将其分解,并查找它是否为枚举。

例如:

string enumStr = "eSomeEnumObject RANDOMENUMVAL" 

是字符串,我能够拆分并检查它是否是枚举并获得字符串数组:

string[] enumArr = { "SomeEnumObject", "RANDOMENUMVAL" };

现在,我需要在class TestClass中使用它,它引用了一个包含各种方法定义和枚举的库。 我刚刚提取的枚举对象名称和值基本上已经存在。现在,我知道要将字符串转换为枚举值,我们使用以下内容:

SomeEnumObject enumobj = (SomeEnumObject)Enum.Parse(typeof(SomeEnumObject, "RANDOMENUMVAL");

现在我的问题是:

我如何获得这个enum对象名称作为字符串,被动态写为enum对象类型,因为我试图自动化该过程,显然,当我尝试写:

enumArr[0] enumobj = (enumArr[0])Enum.Parse(typeof(enumArr[0], enumArr[1]);

它会抛出错误,因为它无法将字符串解析为枚举。

现在,有没有办法在不重新定义枚举的情况下执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:3)

您需要使用http://localhost:16010/master-statusType.GetType()来获取类型。

你需要知道:

  • 中的装配
  • 完全限定名称(例如,使用命名空间)

如果枚举与调用代码位于同一个程序集中,则可以使用Assembly.GetType()。如果它位于不同的程序集中,则需要创建程序集限定名称,或者查找程序集(例如,使用编译时知道的其他类型)并在程序集上调用Type.GetType(fullyQualifiedName)

当您解析枚举值时,编译时类型将为GetType,但它实际上将是枚举中的(盒装)值。那时你可以:

  • 如果您不需要任何其他内容,请将其保留为object
  • 使用object关键字
  • 动态使用它
  • 使用dynamic将其转换回字符串(这可能不会为您提供相同的字符串,例如,如果同一个值有多个名称)
  • 将其展开到基础类型。即使您不知道枚举
  • ,您也可能知道基础类型

不能使用变量的运行时值作为类型来声明变量,因为编译器需要知道编译时的类型。但上面的选项之一可以帮助你。

这是一个完整的例子:

ToString()