Недавно я начал свои шаги с C #, и я читал о перегрузке метода. У меня есть следующий код в качестве расширения метода в классе, который я назвал Utilities:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Classes
{
public static class Utilities
{
public static IEnumerable<Control> GetAllChildren(this Control parent)
{
Stack<Control> stack = new Stack<Control>();
stack.Push(parent);
while (stack.Any())
{
var next = stack.Pop();
foreach (Control child in next.Controls)
{
stack.Push(child);
}
yield return next;
}
}
}
Этот метод позволяет мне получить все элементы управления в указанном c элементе управления. Удивительно! Я могу вызвать этот метод следующим образом:
private void Button1_Click(object sender, EventArgs e)
{
foreach (Control control in TabControl.SelectedTab.GetAllChildren())
{
MessageBox.Show(control.Name);
}
}
и, как я и ожидал ... Я могу go через каждый из элементов управления в указанном c элементе управления. (В данном случае ... TabControl)
Мой вопрос такой: Как я могу сделать этот метод перегрузкой метода ?, чтобы я принял в качестве первого аргумента список из нескольких элементов управления и выполнить этот же метод для каждого из них и вернуть его как одну коллекцию, которая может повторяться
Пример: я хочу сделать что-то похожее на следующее:
private void ButtonSave_Click(object sender, EventArgs e)
{
List<Control> controls = new List<Control> {
TabControl1,
TabControl2
};
foreach (Control control in controls.GetAllChildren())
{
MessageBox.Show(control.Name);
}
}
Пожалуйста, я Буду признателен за любую помощь .. Большое спасибо заранее
РЕДАКТИРОВАТЬ 1:
В моем классе утилит я создал новый метод с тем же именем и классом выглядит так, но я не знаю, как написать логи c этого метода для выполнения ожидаемого действия ...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BASCAL.Classes
{
public static class Utilities
{
public static IEnumerable<Control> GetAllChildren(this Control parent)
{
Stack<Control> stack = new Stack<Control>();
stack.Push(parent);
while (stack.Any())
{
var next = stack.Pop();
foreach (Control child in next.Controls)
{
stack.Push(child);
}
yield return next;
}
}
public static IEnumerable<Control> GetAllChildren(this List<Control> parents)
{
if (parents.Any())
{
// Logic goes here!
}
}
}
}