获取带有详细信息的程序集的构造函数



根据模拟。net程序集,我试图获得具有参数名称和参数数据类型的程序集的构造函数。我使用以下代码:

SampleAssembly = Assembly.LoadFrom("");
ConstructorInfo[] constructor = SampleAssembly.GetTypes()[0].GetConstructors();
foreach (ConstructorInfo items in constructor)
{
    ParameterInfo[] Params = items.GetParameters();
    foreach (ParameterInfo itema in Params)
    {
        System.Windows.Forms.MessageBox.Show(itema.ParameterType + " " + itema.Name);
    }
}

但似乎在itema中没有任何东西,但我在方法和作品上实现了相同的场景!(我确定我的程序集包含超过2个具有不同参数的构造函数)。

那么,有什么建议检索带有参数的程序集的构造函数吗?!

Edit:我在主代码上使用正确的路径。Assembly.LoadFrom("");

提前感谢。

我认为你的问题是你只在索引[0]处取Type的构造函数。

检查这是否有效:

List<ConstructorInfo> constructors = new List<ConstructorInfo>();
Type[] types = SampleAssembly.GetTypes();
foreach (Type type in types)
{
    constructors.AddRange(type.GetConstructors());
}
foreach (ConstructorInfo items in constructors)
{
    ParameterInfo[] Params = items.GetParameters();
    foreach (ParameterInfo itema in Params)
    {
        System.Windows.Forms.MessageBox.Show(itema.ParameterType + " " + itema.Name);
    }
}

适合我。但是,您忘记指定程序集路径了:

SampleAssembly = Assembly.LoadFrom("");

应该是这样的:

SampleAssembly = Assembly.LoadFrom("C:\Stuff\YourAssembly.dll");

编辑:为了回应你的评论,设置一个断点,看看GetTypes()[0]持有什么。即使只显式创建一个类,也可能存在匿名类。您不应该假设您想要反射的类确实是程序集中唯一的类。

如果你写这样的代码:

class Program
{
  static void Main()
  {
        Type t = typeof(Program);
        ConstructorInfo[] constructor = t.GetConstructors();
        foreach (ConstructorInfo items in constructor)
        {
            ParameterInfo[] Params = items.GetParameters();
            foreach (ParameterInfo itema in Params)
              System.Windows.Forms.MessageBox.Show(itema.ParameterType + " " + itema.Name);
        }   
  }
  public Program() {}
  public Program(String s) {}
}

您将看到提取参数类型和名称的代码应该并且将会工作,所以问题是如何定位类。

相关内容

  • 没有找到相关文章

最新更新