我一直在試驗一個將掃描程序集的應用程序,檢查任何表單類,然後查看它們具有的成員。創建表單實例時的反射錯誤
我使用查詢組件的代碼是:
Assembly testAssembly = Assembly.LoadFile(assemblyPath);
Type[] types = testAssembly.GetTypes();
textBox1.Text = "";
foreach (Type type in types)
{
if (type.Name.StartsWith("Form"))
{
textBox1.Text += type.Name + Environment.NewLine;
Type formType = testAssembly.GetType();
Object form = Activator.CreateInstance(formType);
}
}
我使用這個查詢標準形式:
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace TestForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
我的問題是,當代碼試圖Activator.CreateInstance(formType)
那我得到一個異常說明:"No parameterless constructor defined for this object."
我還可以從檢查formType看到「DeclaringMethod:‘formType.DeclaringMethod’扔類型的異常'System.InvalidOperationException」
我不明白錯誤消息,因爲窗體有一個標準的構造函數,我是否錯過了一些非常明顯的東西?
編輯:type.Name
顯示代碼試圖實例化爲Form1
的類型。
你肯定* *這是其失敗的類型,而不是一些其他類型的衛生組織e名稱以「Form」開頭? –
type.Name.StartsWith(「Form」) - 不是檢查此類型是否爲表單的最佳方法 – username
@JonSkeet - 我不確定其他類型可能是什麼,我正在查詢標準Windows窗體項目在VS2010中創建。 – GrandMasterFlush