簡體   English   中英

在靜態類中使用另一個方法的列表

[英]Using a list from another method in a static class

因此,我有一個靜態類,其中的一個列表聲明為它的成員之一,並且我在一個函數中填充該列表,可以說它稱為PopulateList()。 是否可以在不使用以下功能的情況下修改列表:

1)調用它作為參數2)在構造函數中實例化它(嘗試使類保持靜態。我正在使用模板,因此我無法真正更改類的結構)

但是,如果不進行任何實例化,我顯然會收到null異常,因此我想知道是否存在第三種方法。

       public Static class MyClass{

             static public List<String> m_SuiteFileNameList2=null;


        public static bool Function1(inp){
              //m_SuiteFileNameList2 stuff
         }

        public static void Function2(){
             //m_SuiteFileNameList2 other stuff
          }
       }

您可以使用靜態構造函數 ,也可以使用靜態初始化。 它可以使您的類保持static ,但可以確保始終定義該列表:

static class MyClass
{
    static MyClass()
    {
        MyList = new List<Whatever>();
    }

    // etc
}

要么

static class MyClass
{
    public static List<Whatever> MyList = new List<Whatever>();
}

另一種選擇是向列表的每種用法添加一個null檢查:

public static void MyMethod()
{
    if (MyList == null)
    {
        MyList = new List<Whatever>();
    }
    //etc
}

我會調用一個名為“ Initialize”的函數,該函數是靜態的,並會照顧您的靜態成員。

盡管我建議盡可能反對靜態成員。

為什么?

程式碼片段

public static class YourClass
{
    public static List<string> YourList;

    public static void InitializeList()
    {
        YourList = new List<string>();
        YourList.Add("hello");
        YourList.Add("how");
        YourList.Add("are");
        YourList.Add("you?");
    }
}

從外部調用您的Initialize-Function:

 YourClass.InitializeList();

編輯:給定您的代碼,您也可以這樣:

  public Static class MyClass{

             static public List<String> m_SuiteFileNameList2=null;


        public static bool Function1(inp){
             if(m_SuiteFileNameList2 == null)
             { m_SuiteFileNameList2 = new List<String>();}
              //m_SuiteFileNameList2 stuff
         }

        public static void Function2(){
             if(m_SuiteFileNameList2 == null)
             { m_SuiteFileNameList2 = new List<String>();}
             //m_SuiteFileNameList2 other stuff
          }
       }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM