从另一个班级

时间:2017-09-06 14:40:39

标签: c# .net wpf

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

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

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

然后我将其添加到我的MainWindow并将一些内容添加到List中: 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,因此无法获取List。

有人可以告诉我为什么它没有得到名单?以及如何访问此列表的哪些项目?

3 个答案:

答案 0 :(得分:3)

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

当您创建FirmCustomer的实例时,您应该将现有的ListTable实例传递给它,以便它可以读出之前添加的值。

此外,将项添加到列表时,代码可能没有按照您的意图执行操作。您发布的代码会在列表中添加一个object[]。您应该分别为每个项目调用IList.Add(),而不是先将它们添加到阵列中。

答案 1 :(得分:2)

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

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

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

<强>用法:

IList<object> = ListTable.GetList();

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

答案 2 :(得分:1)

使用静态关键字声明该字段对所有人来说都很常见,所以你可以获得值添加一个类获得另一个类。我在下面的代码中做了一个样本

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();
        }
    }
}