【问题标题】:Dynamic Typeof in C#C# 中的动态类型
【发布时间】:2009-08-04 16:10:40
【问题描述】:

我在编写 typeof 语句时遇到问题,该语句将使用配置文件中的变量,代码如下所示

Type t = new typeof ("My.other.class" + configValue[0]);

configValue 是我从 app.config 文件中获得的动态值。

我得到的错误是“预期类型”,如果我直接输入类就可以了,所以我假设我的格式不正确。这个应该怎么写?

【问题讨论】:

    标签: c# typeof


    【解决方案1】:

    typeof 关键字用于编译时使用。请改用Type.GetType(string) API。

    【讨论】:

    • 这行不通,除非该类型在当前程序集或 mscorlib 中。否则,您需要提供完整的程序集限定名称,而不仅仅是命名空间+类型。
    【解决方案2】:

    这是你要找的吗?

    Type t = Type.GetType("spork");
    object myspork = Activator.CreateInstance(t);
    

    【讨论】:

      【解决方案3】:

      要仅使用命名空间和类名(如问题中所示)来执行此操作,您还需要知道哪个程序集包含该类。

      如果当前运行的程序集(或 mscorlib)包含该类型,那么您可以使用Type.GetType(string) 来获取该类型。

      如果类型包含在不同的程序集中(即:库),那么您将需要使用Assembly.GetType。但是,这需要有一个 Assembly 实例,该实例可以通过 Assembly.Load 或在程序集中使用其他类型来检索。

      【讨论】:

      • 您仍然可以使用 Type.GetType。您只需要程序集限定的类型名称。我链接的 API 文档来解释这一点。
      • 是的 - 我的评论也指出了这一点。如果不使用程序集,您将无法使用问题中的语法(命名空间 + 类型)加载它。
      猜你喜欢
      • 2021-12-02
      • 2010-10-31
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2010-11-23
      • 2010-12-24
      • 2015-12-19
      相关资源
      最近更新 更多