使用字符串变量访问静态类成员(字符串包含静态类的名称)

时间:2018-07-01 11:57:56

标签: c# asp.net-web-api

我很困惑,是否有任何方法可以使用在字符串变量中定义的静态类名称来访问静态类属性值 示例:

我有一个静态类,如下所示

public static class CoreConstants
{
    public const string  HostAddress= "someaddress";
}

我有一个像

这样的字符串变量
private string staticClassName="CoreConstants";

那么有什么方法可以使用字符串获取HostAddress字段的值?

我知道如果类是普通类,我们可以使用Activator.CreateInstance()方法,并使用实例可以获取值。但是,如果该类是静态类又该怎么办呢?

我的实际情况就像我只有几个静态类,其中包含用于不同语言的常量。每个请求都将传递一个语言指示符字符串,因此我需要使用该字符串从特定的静态类中获取确切的消息。

1 个答案:

答案 0 :(得分:2)

您首先必须获取属性所属的类型:

var type = Type.GetType("CoreConstants");

请注意,您需要一个fully qualified name,包括在其中定义类型的名称空间和程序集。否则,类型加载器将只在mscorlib中查找,使GetType返回null。 / p>

如果您有类型,只需根据要访问的字段或属性来调用Type.GetPropertyType.GetField

var field = type?.GetField("HostAddress");

最后获取静态字段的值:

var value = field?.GetValue(null);

当您的字段为static时,提供给GetValue的参数为null。如果它是一个实例字段,则必须提供实例。