2017-09-06 3 views
0
私は私のIListが配置されているクラス作っ

:私は私のメインウィンドウにこれを追加し、リストの中にいくつかのものを追加し読むと別のクラスからのIListに書く

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

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

を: 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を取得できません。

誰かが私のリストを取得しない理由を教えてもらえますか?そして、このリストにアクセスするにはどうすればいいですか?

+0

以下のコードを作った。しかしFirmCustomer.xaml.csに、私はプライベートListTable list'の代わりに、 'ListTableリスト=新しいListTable''のリストを呼び出します。なぜそれはまだコピーですか? –

+1

@AlbertoSolano 'GetList()'がコピーを返していない - 値の型でないオブジェクトは参照型なので、参照を返します。問題は、 'FirmCustomer'に' ListTable'のインスタンスがあり、 'MainWindow'で追加された項目についてはわからないということです。あなたの答えは – Andy

答えて

2

あなたは異なるクラス間のリストを共有したい場合は、あなたがそれstatic作ることができます:

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

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

使用法:今あなたは、各ListTableのための新しいIList<object>を作成しているのよう

IList<object> = ListTable.GetList(); 

インスタンスを作成します。

+0

thx男。私の質問に対する正しい答えはいつもわかっています。これは正常に動作します。 –

3

提供したコードサンプルに基づいて、MainWindowおよびFirmCustomerは、ListTableクラスの2つの異なるインスタンスを使用しています。項目をMainWindowにインスタンスに追加しましたが、FirmCustomerのインスタンスは元のインスタンスについて何も認識しません。

FirmCustomerのインスタンスを作成するときは、既存のインスタンスListTableを渡して、以前に追加した値を読み出すようにしてください。

また、リストに項目を追加するとき、コードはおそらくあなたが意図したことをしていないでしょう。投稿したコードは、object[]をリストに追加します。最初に配列に追加するのではなく、各項目に対して個別にIList.Add()を呼び出す必要があります。

+0

thxです。私は 'System.Collections.Gerneric.IList 'から 'System.Collections.IList'に変換するとエラーが発生する は不可能です。あなたはそれを修正する方法を知っていますか?また、IListやListを使うことがわからない。 –

+0

@OJeanこれは2つの異なるインターフェースです。できるだけ 'System.Collections.Generic.IList'を使うべきです。そうすれば、すべてを' object'に変換するのではなく、リストを強く入力することができます。 – Andy

1

静的キーワードでフィールドを宣言すると、すべての場合に共通です。値を取得すると、1つのクラスを追加して別のクラスを取得できます。私は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(); 
     } 
    } 
} 
+0

thx uもあります。 mm8それも言った、それはうまく動作:) –

関連する問題