【问题标题】:Using a ClassName as a parameter [duplicate]使用 ClassName 作为参数 [重复]
【发布时间】:2015-12-28 16:41:30
【问题描述】:

我有几个包含验证方法的类:ClientValidation、PaymentValidation 等。计划是动态构建一个方法列表,用于验证记录。为此,我需要能够获取每个类中包含的方法列表。为此,我编写了以下行:

var methods = typeof( ClientValidation ).GetMethods();

如果我的所有方法都在 ClientValidation 类下,这非常有用,但它们不是。我想要做的是能够动态传递类名,因此该行看起来更像:

var dynamicClassName = GetClassNameMethod();

var methods = typeof( dynamicClassName ).GetMethods();

这可能吗?我该怎么做?

【问题讨论】:

  • 旁注:对于未来的问题,而不是“搜索了很多”的变体,请添加指向您发现的文章/问题的链接,并用一行描述为什么特定解决方案不适合您。

标签: c# reflection


【解决方案1】:

你可以这样做:

var methods = Type.GetType(full_class_name).GetMethods();

其中full_class_name 是完整的类名(带有命名空间)。例如:“ConsoleApplication1.Class1”。

如果你想使用没有命名空间的类名(例如“Class1”),你可以像这样在程序集中搜索这样的类:

var methods = Assembly.GetExecutingAssembly().GetTypes().First(x => x.Name == class_name).GetMethods();

其中class_name 是类名,如“Class1”。

【讨论】:

  • 我无法使这项工作或任何其他方法工作,我才意识到为什么 - 这些方法在不同的程序集中,而不是在当前正在执行的程序集中。当我在正确的位置使用它时,它就像一个魅力。这就是为什么我对其他副本没有运气。抱歉重复了。
  • 如果您知道另一个程序集中的某个类(例如Class2),您可以使用typeof(Class2).Assembly 来获取该程序集。
猜你喜欢
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
相关资源
最近更新 更多