簡體   English   中英

檢索所有名稱空間類型

[英]Retrieving all namespace Types

我有一個項目引用了一個名為“ EquipmentDrivers”的名稱空間,該名稱空間包含在實驗室中運行Voltmeter / Sourcemeter / NetworkAnalyzer機器的類。 (即:Agilent66XX,Keithley2400)

我想遍歷命名空間中的一類類型,以查找與包含類的確切名稱的字符串相對應的類型。 (即:string equipmentName =“ Keithley2400”,驅動程序是公共類Keithley2400)

我該怎么做呢? 以下是我的第一次嘗試:

Type[] NamespaceTypes;
Assembly myAssembly = Assembly.Load("EquipmentDrivers");
NamespaceTypes = myAssembly.ManifestModule.GetTypes();

for (int i = 0; i < NamespaceTypes.Length; i++)
{
 if (NamespaceTypes[i].ToString() == equiptmentName)
 {
      return new NamespaceTypes[i](primaryGPIBAddress, true);
 }
}

好了,現在我有了這個

public SourceMeter ReturnSourceMeter(string equiptmentName, int primaryGPIBAddress)
{    
Assembly myAssembly = Assembly.LoadFrom("EquipmentDrivers.dll");
var namespacePrefix = "EquipmentDrivers.";
var fullName = namespacePrefix + equiptmentName;
var type = myAssembly.GetType(fullName);
return (SourceMeter)Activator.CreateInstance(type, primaryGPIBAddress, true);

/*
if (equiptmentName == "Keithley2400")
{
return new Keithley2400(primaryGPIBAddress, true);
}
else if (equiptmentName == "Agilent66XX")
{
return new Agilent66XX(primaryGPIBAddress, true);
}
return null;
*/
}

這個對嗎? 順便說一句,感謝一百萬個家伙,測試實驗室中沒有一個人知道如何做到這一點

命名空間不屬於.NET類型系統。 它們是大多數語言提供的便利。 存儲的名稱實際上是標准名稱:名稱空間和類名稱。

var namespacePrefix = "EquipmentDrivers.";
var fullName = namespacePrefix + equiptmentName;
var type = myAssembly.GetType(fullName);
return Activator.CreateInstance(type, primaryGPIBAddress, true);

您還可以將ReturnSourceMeter方法移至驅動程序部件,並在每次添加設備類型時對其進行更新。

您可以通過以下方式查找類型並從中創建實例:

Assembly SampleAssembly = Assembly.LoadFrom("your.dll");

var type = SampleAssembly.GetTypes().FirstOrDefault(t => t.Name == "YourTypeName");

var instance = Activator.CreateInstance(type);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM