我有一个包含递归函数的类。
此类在Form1中使用。
好吧,我现在想要这个函数将项添加到Form1中的ListBox1。
如果这是一个正常的函数,我只会给出我希望显示的值,如Listbox1.items.add(Obj.ListDirectiory());
。
将递归函数中的值传递给ListBox会有什么样的可能性?
public void ListDirectory(FtpClient client, string path)
{
try
{
foreach (FtpListItem item in client.GetListing(path))
{
if (item.Type == FtpFileSystemObjectType.Directory)
{
Console.WriteLine("Folder: " + item.FullName);
//This is where I want to add something to ListBox1
//call the function again...
ListDirectory(client, item.FullName);
}
else
{
Console.WriteLine("File: " + item.FullName);
//This is where I want to add something to ListBox1
}
}
}
catch (Exception)
{
throw;
}
}
答案 0 :(得分:0)
您可以尝试其中一种
解决方案1 使用类引用
public class MyFunkyClass
{
public ListBox ListBox { get; set;}
public void ListDirectory(FtpClient client, string path)
{
// stuff
Listbox.Items.Add(item.FullName)
// stuff
ListDirectory(client, item.FullName);
}
}
// Usage
var myFunkyClass = new MyFunkyClass() { ListBox = listBox1}
myFunkyClass.ListDirectory(client,path);
解决方案2 使用方法参考
public class MyFunkyClass
{
public void ListDirectory(FtpClient client, string path, Listbox listbox)
{
// stuff
listbox.Items.Add(item.FullName))
// stuff
ListDirectory(client, item.FullName, listbox);
}
}
// Usage
var myFunkyClass = new MyFunkyClass()
myFunkyClass.ListDirectory(client,path,listBox1);
解决方案3 使用行动
public class MyFunkyClass
{
public void ListDirectory(FtpClient client, string path, Action<string> myAction)
{
// stuff
myAction(item.FullName)
// stuff
ListDirectory(client, item.FullName, myAction);
}
}
// Usage
var myFunkyClass = new MyFunkyClass()
Action<string> myAction = (value) => {
listBox1.Items.Add(value);
};
myFunkyClass.ListDirectory(client,path,myAction);
// or
myFunkyClass.ListDirectory(client,path, value => listBox1.Items.Add(value));
解决方案4 使用委托
public class MyFunkyClass
{
public delegate void MyDelegate(string value);
public void ListDirectory(FtpClient client, string path, MyDelegate myDelegate)
{
// stuff
myDelegate(item.FullName)
// stuff
ListDirectory(client, item.FullName, myDelegate);
}
}
// Usage
var myFunkyClass = new MyFunkyClass()
myFunkyClass.ListDirectory(client, path, value => listBox1.Items.Add(value)));
有很多方法可以实现这种事情或上述的各种组合,但是这应该会给你一些想法
<强>更新强>
如评论中所述,解决方案3和4基本上是相同的,只是不同的语法糖