У меня есть проект, который ссылается на пространство имен, называемое «EquipmentDrivers» , пространство имен содержит классы, которые запускают машины Voltmeter/Sourcemeter/NetworkAnalyzer в лаборатории. (Ie: Agilent66XX, Keithley2400)Извлечение всех пространств имен Типы
Я хотел бы перебирать список типов в пространстве имен, чтобы найти тот, который соответствует строке, которая содержит точное имя класса. (например: струнное оборудованиеName = «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;
*/
}
Правильно ли это? Кстати спасибо миллиона парней, ни один человек в испытательной лаборатории знает, как это сделать
И что случилось с этой первой попыткой? AKA, какова ваша конкретная проблема. SO, это не место, чтобы заставить людей делать всю работу за вас. –
Ответ прост, но возникновение вопроса меня смущает. Зачем вам это нужно? Есть лучшие способы, пожалуйста, мотивируйте, почему делать это «как это» - лучший способ? – flindeberg
Если [ответ Джеффри] (http://stackoverflow.com/a/20408737/80274) был правильным, обязательно отметьте его, чтобы он получил кредит. –