繁体   English   中英

从另一个类读取和写入IList

[英]Read and Write into IList from another Class

我在IList所在的位置创建了一个类:

public class ListTable
{
    private IList<object> rolelist = new List<object>();

    public IList<object> GetList()
    {
        return rolelist;
    }
}

然后,将其添加到MainWindow并将一些内容添加到列表中:MainWindow.xaml.cs

ListTable rolelist = new ListTable();
private void CheckRights()
{
    IList<object> testlist = myClass.GetList();

    testlist.Add(new object[] { i,                          // 0
    (string)reader["role"],                             // 1
    (int)reader["can_add_kunde"],                       // 2
    (int)reader["can_add_assignment_kunde"],            // 3
    (int)reader["can_delete_kunde"],                    // 4
    (int)reader["can_edit_kunde"],                      // 5
    (int)reader["can_add_firmenkunde"],                 // 6
    (int)reader["can_add_assignment_firmenkunde"],      // 7
    (int)reader["can_delete_firmenkunde"],              // 8
    (int)reader["can_edit_firmenkunde"],                // 9
    (int)reader["can_add_assignment"],                  // 10
    (int)reader["can_delete_assignment"],               // 11
    (int)reader["can_edit_assignment"],                 // 12
    (int)reader["can_add_employee"],                    // 13
    (int)reader["can_delete_employee"],                 // 14
    (int)reader["can_edit_employee"],                   // 15
    (int)reader["can_see_adminpanel"],                  // 16
    (int)reader["can_change_columns_kunden"],           // 17
    (int)reader["can_change_columns_firmenkunden"],     // 18
    (int)reader["can_change_databaseTables"]            // 19
    });
}

现在我想从另一个类访问此列表:FirmCustomer.xaml.cs

private ListTable list;
private void CheckRights(string username)
{
    IList<object> called = list.GetList();
    foreach (object[] item in called)
    {
        MessageBox.Show(item[1].ToString());
    }
}

called始终为null,因此不会获取列表。

有人可以告诉我为什么它没有得到清单吗? 以及如何访问此列表及其项目?

根据您提供的代码示例, MainWindowFirmCustomer使用的是ListTable类的两个不同实例。 您已将项目添加到MainWindow的实例中,但是FirmCustomer中的实例对原始实例一无所知。

创建FirmCustomer实例时, FirmCustomer的现有实例ListTable给它,以便它可以读出以前添加的值。

另外,将项目添加到列表中时,代码可能没有按照您的预期做。 您发布的代码会将一个object[]添加到列表中。 您应该IList.Add()为每个项目调用IList.Add() ,而不是先将它们添加到数组中。

如果要在不同的类之间共享列表,可以将其设为static

public class ListTable
{
    private static IList<object> rolelist = new List<object>();

    public static IList<object> GetList()
    {
        return rolelist;
    }
}

用法:

IList<object> = ListTable.GetList();

到目前为止,您正在为创建的每个ListTable实例创建一个新的IList<object>

使用static关键字声明该字段对于所有字段都是通用的,因此,您可以将值添加一个类,再获取另一个类。 我被做了一个下面的代码示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ReadIList
{
    class Program
    {
        static void Main(string[] args)
        {
            mainclass mc = new mainclass();
            mc.CheckRights();
            secondclass sc = new secondclass();
            sc.CheckRights(string.Empty);
        }
    }
    public class ListTable
    {
        public static  IList<object> rolelist = new List<object>();

        public IList<object> GetList()
        {
            return rolelist;
        }
    }

    public class mainclass
    {
        ListTable rolelist = new ListTable();
        private ListTable myClass= new ListTable();
        public void CheckRights()
        {
            IList<object> testlist = myClass.GetList();
            testlist.Add(new object[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 });   
        }
    }

    public class secondclass
    {
        private ListTable list=new ListTable();
        public void CheckRights(string username)
        {
            IList<object> called = list.GetList();
            foreach (object[] item in called)
            {

                Console.WriteLine(item[1].ToString());
            }
            Console.ReadLine();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM