【问题标题】:Getting Type of Enum witnin class through C# reflection通过 C# 反射在类中获取枚举类型
【发布时间】:2012-02-23 07:28:40
【问题描述】:

我有一个像

这样的枚举
namespace EnumTest
    {
    public class Enumeration
    {
        public Enumeration();

        public enum Days
        {
           day = sunday,
           night = monday
        }
    }
}

如何通过反射获得几天的类型信息。

Type type = assembly.GetType(Days);

Type type = typeof(Days) 将返回 Days 的类型信息。如果我有String s = "Days",用这个字符串 s 我需要获取 Days 的类型信息。

我需要类型 = 天

【问题讨论】:

  • 你需要Enumeration+Days作为名字,我想。
  • 您需要哪些信息,请显示预期名称
  • 此代码甚至无法编译 - a) 枚举值不能输入为 string b) 它们由 , 而不是 ; 分隔。您应该从一些可编译的代码开始,然后,当您遇到特定问题时,请来这里询问。我也不明白这里要达到什么目的 - 我认为您需要提供更多背景信息。
  • 关于您的上次编辑 - 您所说的“输入日期信息”是什么意思。枚举的类型通常是int,很少需要使用其他类型。正如我所说,在您更改要用于枚举的类型之前,这段代码甚至不会编译,目前是string

标签: c# reflection types enums


【解决方案1】:

我不确定我是否理解你。如果您在字符串对象中有类型名称并且想要获取类型对象,则需要编写整个类型名称。
而且因为您的枚举是内部类型,所以完整的类型名称是“EnumTest.Enumeration.DaysEnumTest.Enumeration+Days”。

要获取你可以调用的类型对象然后

Type type = assembly.GetType("EnumTest.Enumeration.DaysEnumTest.Enumeration+Days");

【讨论】:

    【解决方案2】:

    访问你需要的类型很简单:

    Type type = typeof(Enumeration.Days);
    

    请注意,枚举声明不会像您在问题中所写的那样起作用。应该是这样的:

    public enum Days    
        {    
           Monday,
           Tuesday,
           ...
        }   
    

    【讨论】:

    • 事实上是正确的,但我怀疑这个问题存在根本性的问题,即为什么这种类型如此有趣?
    • @Adam,我的方法之一有一个枚举参数。 GetDays(int dayCount, EnumTest.Enumeration.Days EnumTest.Enumeration.Days.day),我需要通过反射调用这个方法。所以我正在寻找获取类型
    • @VinodKannan 发布您为调用该方法而编写的代码,并指出您遇到的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    相关资源
    最近更新 更多