我的项目中的类库中有许多不同的clases。我使用Quartz.NET(一个调度系统)来安排和加载作业,实际的作业执行是在这些类库中完成的。我打算有很多类型的工作类型,每个工作类型都有自己的类在类库中执行。
我遇到的一个问题是我无法在这些类中嵌套方法。例如,这是我的班级:
public class FTPtoFTP : IJob
{
private static ILog _log = LogManager.GetLogger(typeof(HTTPtoFTP));
public FTPtoFTP()
{
}
public virtual void Execute(JobExecutionContext context)
{
//Code that executes, the variable context allows me to access the job information
}
}
如果我尝试将一个方法放在类的执行部分,例如......
string[] GetFileList()
{
//Code for getting file list
}
它期望在我的GetFileList开始之前执行方法的结束,并且也不允许我访问我需要的上下文变量。
我希望这是有道理的,再次感谢 - 你们统治
答案 0 :(得分:2)
不,你不能嵌套方法。您可以使用以下几种方法:
答案 1 :(得分:1)
您似乎误解了类代码的工作原理?
GetFileList()
不会因为你在Execute()
之后将它放在课堂中而执行 - 你必须实际调用它,如下所示:
public class FTPtoFTP : IJob
{
private static ILog _log = LogManager.GetLogger(typeof(HTTPtoFTP));
public FTPtoFTP()
{
}
public virtual void Execute(JobExecutionContext context)
{
string[] files = GetFileList();
//Code that executes, the variable context allows me to access the job information
}
string[] GetFileList()
{
//Code for getting file list
}
}
还是我完全误解了你的问题?
答案 2 :(得分:1)
您可以使用lambda表达式:
public virtual void Execute(JobExecutionContext context)
{
Func<string[]> getFileList = () => { /*access context and return an array */};
string[] strings = getFileList();
}
答案 3 :(得分:1)
您是否尝试从GetFileList
函数获取结果并在Execute
中使用它们?
如果是这样,那么试试这个:
public class FTPtoFTP : IJob
{
private static ILog _log = LogManager.GetLogger(typeof(HTTPtoFTP));
public FTPtoFTP()
{
}
public virtual void Execute(JobExecutionContext context)
{
//Code that executes, the variable context allows me to access the job information
string[] file_list = GetFileList();
// use file_list
}
private string[] GetFileList()
{
//Code for getting file list
return list_of_strings;
}
}
答案 4 :(得分:1)
Execute
是一个虚方法,它不是一个声明其他方法的空间,在你内部意味着为工作放置任何逻辑,它不是声明新方法的命名空间。如果要使用方法化逻辑,只需在类定义中声明它们并从execute函数中调用它们。
public virtual void Execute(JobExecutionContext context)
{
mymethod1();
mymethod2();
}
private void mymethod1()
{}
private void mymethod2()
{}
答案 5 :(得分:1)
似乎你想根据一些上下文信息获取文件列表 - 在这种情况下,只需在GetFileList
方法中添加一个参数并从Execute
传递它:
public virtual void Execute(JobExecutionContext context)
{
string[] fileList = this.GetFileList(context);
...
}
private string[] GetFileList(JobExecutionContext) { ... }