C#-检查List <>是否已初始化

时间:2018-08-18 09:48:02

标签: c# list initialization out

我有接受out List<int> list作为参数的函数。如何检查list是否已初始化?

此代码给了我Use of unassigned out parameter 'list'错误:

public void CheckList(out List<int> list)
    {
        if (list == null) {
            list = List<int>();
        }
    //Rest of the code
    }

我检查过的事实:

  
      
  • 作为out参数传递的变量在传递给方法调用之前不必进行初始化。但是,调用的方法是   方法返回之前需要分配一个值。 out parameter modifier
  •   

编辑: 我希望我的方法能够接受两个选项:带有elemtns的列表并将附加元素添加到其中,或者在其他情况下初始化列表并向其中添加元素。

5 个答案:

答案 0 :(得分:1)

如果要处理 out 参数,则很可能它没有初始化,因为该方法应该将其初始化。 如果它是由“ ref”传递的,那么您将对其进行检查。

答案 1 :(得分:0)

class Program
{
    public static List<string> testListInitialized;
    public static List<string> testListUninitialized;

    static void Main(string[] args)
    {
        testListInitialized = new List<string>();
        testListInitialized.Add("Test");

        Console.WriteLine("Checking testListInitialized...");
        CheckList(ref testListInitialized);
        Console.WriteLine("---------");
        Console.WriteLine("Checking testListUninitialized...");
        CheckList(ref testListUninitialized);
        Console.WriteLine("---------");
        Console.ReadKey();
    }

    static void CheckList(ref List<string> checkList)
    {
        if (checkList == null)
        {
            Console.WriteLine("List to check is null. Initializing.");
            checkList = new List<string>();
            return;
        }
        //Do other code here.
        Console.WriteLine("List to check is initialized.");
        return;
    }
}

Preview

答案 2 :(得分:0)

我为sudo pip install netifaces 添加了一个新参数,它将对您有用 这个如何。没有初始化就没有更多的接受方法。

select()

答案 3 :(得分:0)

为什么不使用包装纸?

public void CheckListWrapper(ref List<int> list)
{
    if(list == null)
    { 
        CheckList(out list);
    }
    else
    {
        //append whatever
    }
}

public void CheckList(out List<int> list)
{
     list = List<int>();       
    //Rest of the code
}

答案 4 :(得分:-1)

尝试以下代码:

bool IsInitialised(List myList) {
    if ( (myList!= null) && (!myList.Any()) )
     {
         return true;
     }
return false;
}

一种无linq的方式将是:

if(myList != null && myList.Count == 0){
  // The list is empty. Add something here
}

从像Main这样的调用方法中: 伪代码。 Testmethod(引用列表)和TestMethod(列表)具有不同的签名,因此它们都可以编译。

if(IsInitialised(list))
 Call TestMethod(ref list);
Else call TestMethod(list);