从propertyType中提取枚举类型

时间:2013-08-14 03:04:37

标签: c# generics enums

我有以下情况

public class TestData
{
     public TestEnum EnumTestData{get;set;}
}

public Enum TestEnum
{
     Test1,Test2,Test3 
}

我有另一个类遍历我的TestData类以获取所有属性。根据属性类型,它将为其生成随机数据。现在当我的propertyType是Enum类型时,我如何知道它的枚举类型以及如何将Test1,Test2或Test3作为我的输出?

3 个答案:

答案 0 :(得分:5)

您可以使用Type.GetProperties方法获取所有属性的列表:

var targetType = typeof(TestData);
var properties = targetType.GetProperties();

然后检查PropertyInfo.PropertyTypeType.IsEnum属性,检查它是否为Enum类型:

foreach(var prop in properties)
{
    if (prop.PropertyType.IsEnum)
    {
        ...
    }
}

最后使用Enum.GetValues方法获取随机值:

var random = new Random();
...

var values = Enum.GetValues(prop.PropertyType);
var randomValue = ((IList)values)[random.Next(values.Length)];

答案 1 :(得分:0)

您可以.ToString() EnumTestData属性,如下所示:

var test = new TestData();
test.EnumTestData = TestEnum.Test1;

var dummy = test.EnumTestData.ToString();

注意:dummy将为"Test1"

答案 2 :(得分:0)

不完全确定你在问什么,但这就是你如何比较并获得枚举的字符串值:

var td = new TestData();
// compare
if (td.EnumTestData == TestEnum.Test1)
{
    // Will output "Test1"
    Console.WriteLine(td.EnumTestData.ToString());
}

另外,我确定这只是一个错字,但它是enum而不是Enum

public enum TestEnum
{
     Test1,Test2,Test3 
}