C# 通过it动态调用/调用静态方法';姓名
我有当前的代码:C# 通过it动态调用/调用静态方法';姓名,c#,C#,我有当前的代码: public static OrderDraft ParseImportFile(Int32 TemplateId, String FTPUser, String CSVFilePath, Boolean IgnoreError = false) { // Init OrderDraft myOrderDraft = new OrderDraft(); // Anticipate Error try { // Load
public static OrderDraft ParseImportFile(Int32 TemplateId, String FTPUser, String CSVFilePath, Boolean IgnoreError = false)
{
// Init
OrderDraft myOrderDraft = new OrderDraft();
// Anticipate Error
try
{
// Load Sync Template Info
SyncTemplateInfo mySyncTemplateInfo = Utils.GetTemplateInfo(TemplateId, IgnoreError);
// Switch On Selected Template
switch (TemplateId)
{
// Template #1
case 1:
myOrderDraft = Parsers.Template1.Parse(FTPUser, CSVFilePath, mySyncTemplateInfo, IgnoreError);
break;
// Template #2
case 2:
myOrderDraft = Parsers.Template2.Parse(FTPUser, CSVFilePath, mySyncTemplateInfo, IgnoreError);
break;
}
}
catch { }
// Finished
return myOrderDraft;
}
其中,Parsers
是文件夹/命名空间的名称TemplateN
是类的名称
我想要能够做的是动态调用静态方法,而不是有一个切换案例,反复复制相同的代码(我可能会开发超过10个解析器)
你知道我怎样才能做到这一点吗?我看了一下,但我不确定如何为自己的代码做到这一点…我希望以下内容可能会有所帮助
string Parsers = "...";
string TemplateN = "...";
string MethodName = "...";
var q = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.IsClass && t.Namespace == Parsers && t.Name == TemplateN
select t;
Type classType = null;
foreach (var item in q)
{
classType = item;//select the first match
break;
}
if (classType == null)
{
return; //no matched class
}
MethodInfo mf = classType.GetMethod(MethodName);
if (mf == null)
{
return; //no matched method
}
myOrderDraft = mf.Invoke(new object()/*Sender*/,new object[]{}/*parameters*/);
我也试过你的建议<代码>类类型为空。同上。