C#根据枚举值获取公共变量的类型

jsm*_*ith 6 c# enums types typeof

我有一个类从逗号分隔的文本文件中解析数据.我有一个字段的枚举,以帮助我更轻松地解析数据.解析所有记录的类保存每个字段的公共变量,当然还有它们的变量类型.我需要根据给定的枚举来获取这些变量的类型.

public enum DatabaseField : int
    {
        NumID1 = 1,
        NumID2 = 2,
        NumID3 = 3,
    };

public class DataBaseRecordInfo
    {
        public long NumID1 { get; set; }
        public int NumID2 { get; set; }
        public short NumID3 { get; set; }

        public static Type GetType(DatabaseField field)
        {
           Type type;

           switch (field)
           {
               case DatabaseField.NumID1:
                   type = typeof(long);
                   break;
               case DatabaseField.NumID2:
                   type = typeof(int);
                   break;
               case DatabaseField.NumID3:
                   type = typeof(short);
                   break;
               default:
                   type = typeof(int);
                   break;
           }

           return type;
        }
     };
Run Code Online (Sandbox Code Playgroud)

NumID1,NumID2,NumID3都在我的构造函数中分配.但是,我希望在没有创建实例的情况下获取这些类型DataBaseRecordInfo.现在我上面的静态方法可行,但是,如果我想更改变量类型,我将不得不在2个位置更改它.有没有办法绕过这两个地方改变它并将其保持为静态方法?

Dav*_*d M 4

如果名称始终完全匹配,您可以使用反射来完成此操作。

return typeof(DataBaseRecordInfo)
    .GetProperty(field.ToString(), BindingFlags.Public | BindingFlags.Instance)
    .PropertyType;
Run Code Online (Sandbox Code Playgroud)

您甚至可以将这些值缓存在字典中,因此如果找到,只需返回字典条目,否则使用反射确定并缓存结果。