C# 如何按姓名获取列表

C# 如何按姓名获取列表,c#,forms,list,rows,picturebox,C#,Forms,List,Rows,Picturebox,本质上,我试图做的是将控件添加到相应的列表“row”+行(无论for循环中的行号是什么),但是,我似乎找不到通过字符串获取列表引用的方法。我想知道是否有办法做到这一点 List<PictureBox> row1 = new List<PictureBox>(); List<PictureBox> row2 = new List<PictureBox>(); List<PictureBox> row3 = new

本质上,我试图做的是将控件添加到相应的列表“row”+行(无论for循环中的行号是什么),但是,我似乎找不到通过字符串获取列表引用的方法。我想知道是否有办法做到这一点

    List<PictureBox> row1 = new List<PictureBox>();
    List<PictureBox> row2 = new List<PictureBox>();
    List<PictureBox> row3 = new List<PictureBox>();
    List<PictureBox> row4 = new List<PictureBox>();
    List<PictureBox> row5 = new List<PictureBox>();
    List<PictureBox> row6 = new List<PictureBox>();
    List<PictureBox> row7 = new List<PictureBox>();
private void fillLists()
    {
        for (int col = 1; col < 7; col++)
        {
            for (int row = 1; row < 6; row++)
            {
                string name = "row_"+row+"_col_"+col;

                PictureBox picture = (PictureBox)this.Controls[name];

                // "row"+row.Add(picture);

            }
        }
    }
列表行1=新列表();
列表行2=新列表();
List row3=新列表();
List row4=新列表();
List row5=新列表();
列表行6=新列表();
List row7=新列表();
私有空填充列表()
{
for(int col=1;col<7;col++)
{
对于(int行=1;行<6;行++)
{
字符串名称=“行”+行+“\u列”+列;
PictureBox picture=(PictureBox)this.Controls[名称];
//“行”+行添加(图片);
}
}
}
编辑1 -添加了这个,看看它是否有效。谢谢大家的帮助

private void fillLists()
    {
        for (int col = 1; col < 7; col++)
        {
            for (int row = 1; row < 6; row++)
            {
                string name = "row_" + row + "_col_" + col;
                if (!rows.ContainsKey(row))
                {
                    rows.Add(row, new List<PictureBox>());
                }

                rows[row].Add((PictureBox)this.Controls[name]);
            }


        }
private void filllist()
{
for(int col=1;col<7;col++)
{
对于(int行=1;行<6;行++)
{
字符串名称=“行”+行+“\u列”+列;
如果(!rows.ContainsKey(row))
{
添加(行,新列表());
}
行[row]。添加((PictureBox)this.Controls[name]);
}
}

使用字典合并所有收藏:

var dict = new Dictionary<string, List<PictureBox>> 
for(int i = 1; i < 8; i++)
{
    dict.Add("row"+i, new List<PictureBox>);
}

使用字典合并所有收藏:

var dict = new Dictionary<string, List<PictureBox>> 
for(int i = 1; i < 8; i++)
{
    dict.Add("row"+i, new List<PictureBox>);
}

由于您想知道如何进行此操作,下面介绍如何使用反射进行此操作:

class Program
{
    List<object> myList1 = new List<object>();
    List<object> myList2 = new List<object>();
    List<object> myList3 = new List<object>();
    List<object> myList4 = new List<object>();
    List<object> myList5 = new List<object>();
    List<object> myList6 = new List<object>();

    static void Main(string[] args)
    {
        Program p = new Program();
        p.Run();

        Console.ReadLine();
    }

    void Run()
    {
        for (int i = 1; i <= 6; i++)
        {
            FieldInfo field = this.GetType().GetField("myList" + i, BindingFlags.NonPublic | BindingFlags.Instance);
            if (field != null)
            {
                List<object> value = field.GetValue(this) as List<object>;

                if (value != null)
                {
                     //You can use it here
                }
                else
                {
                     //Wasn't found
                }
            }
        }
    }
}
类程序
{
List myList1=新列表();
List myList2=新列表();
List myList3=新列表();
List myList4=新列表();
List myList5=新列表();
List myList6=新列表();
静态void Main(字符串[]参数)
{
程序p=新程序();
p、 Run();
Console.ReadLine();
}
无效运行()
{

对于(int i=1;i,由于您想知道如何执行此操作,以下是如何使用反射执行此操作:

class Program
{
    List<object> myList1 = new List<object>();
    List<object> myList2 = new List<object>();
    List<object> myList3 = new List<object>();
    List<object> myList4 = new List<object>();
    List<object> myList5 = new List<object>();
    List<object> myList6 = new List<object>();

    static void Main(string[] args)
    {
        Program p = new Program();
        p.Run();

        Console.ReadLine();
    }

    void Run()
    {
        for (int i = 1; i <= 6; i++)
        {
            FieldInfo field = this.GetType().GetField("myList" + i, BindingFlags.NonPublic | BindingFlags.Instance);
            if (field != null)
            {
                List<object> value = field.GetValue(this) as List<object>;

                if (value != null)
                {
                     //You can use it here
                }
                else
                {
                     //Wasn't found
                }
            }
        }
    }
}
类程序
{
List myList1=新列表();
List myList2=新列表();
List myList3=新列表();
List myList4=新列表();
List myList5=新列表();
List myList6=新列表();
静态void Main(字符串[]参数)
{
程序p=新程序();
p、 Run();
Console.ReadLine();
}
无效运行()
{

对于(int i=1;i)来说,这真是太棒了。谢谢!但它仍然不能回答我的问题。我将更改我的编程,但我仍然好奇如何通过字符串动态访问内容。=)仅仅是因为我喜欢编程。你不能用其他变量形成变量名,你必须将它们添加到引用系统中。这可能是最好的/最简单的选择。唯一的其他方法是反射。
如何通过字符串动态访问事物
你是在问字典是如何工作的,或者你是如何制作字典的我们的原始代码可以工作?对于后者,您必须使用反射,这在这种情况下将是1000%的糟糕。这绝对是太棒了。谢谢!但它仍然不能回答我的问题。我将更改我的编程,但我仍然好奇如何通过字符串动态访问内容。=)仅仅是因为我喜欢编程。你不能用其他变量形成变量名,你必须将它们添加到引用系统中。这可能是最好的/最简单的选择。唯一的其他方法是反射。
如何通过字符串动态访问事物
你是在问字典是如何工作的,或者你是如何制作字典的我们的原始代码可以工作?对于后者,您必须使用反射,在这种情况下这将是1000%的糟糕。非常感谢您,我可以问一下,为什么它慢了?有没有具体原因?反射慢了,它必须对自己的类型结构进行反射才能获取数据。哈希表查找(如字典)要快得多。这实际上是有道理的,非常感谢您花时间解释一切。祝您愉快!非常感谢您,我能问一下,为什么它慢了?有什么具体原因吗?反射慢了,它必须反射自己的类型结构才能获得数据。哈希表查找(如字典)速度快得多。这很有道理,非常感谢你花时间解释一切。祝你度过愉快的一天!