Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-检查列表是否<&燃气轮机;已初始化_C#_List_Initialization_Out - Fatal编程技术网

C#-检查列表是否<&燃气轮机;已初始化

C#-检查列表是否<&燃气轮机;已初始化,c#,list,initialization,out,C#,List,Initialization,Out,我有一个函数,它接受out List作为参数。如何检查列表是否已初始化 此代码给出了使用未分配参数“列表”的错误: public void CheckList(out List<int> list) { if (list == null) { list = List<int>(); } //Rest of the code } 公共作废清单(外清单) { if(list==null){ li

我有一个函数,它接受
out List
作为参数。如何检查
列表
是否已初始化

此代码给出了使用未分配参数“列表”的
错误:

public void CheckList(out List<int> list)
    {
        if (list == null) {
            list = List<int>();
        }
    //Rest of the code
    }
公共作废清单(外清单)
{
if(list==null){
list=list();
}
//代码的其余部分
}
我已核实的事实:

  • 作为参数传递的变量在传入方法调用之前不必初始化。但是,被调用的方法是 需要在方法返回之前指定一个值
编辑:
我希望我的方法能够接受这两个选项:使用elemtns列出并向其附加传统元素,或者在其他情况下初始化列表并向其中添加元素。

如果您处理的是out参数,那么最确定的是它没有初始化,因为该方法应该初始化它。
如果它是通过“ref”传递的,那么您将检查它。

请尝试以下代码:

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

我为
sameList
添加了一个新参数,它对您非常有用 这个怎么样。没有初始化就无法接受

private static void Main()
    {
        List<int> i=null;
        CheckList(out i,i);
        Console.WriteLine(i[0]);
    }
    public static void CheckList(out List<int> list,List<int> sameList)
    {
        list = sameList;
        if(list==null)
        {
            //Intialize
            list = new List<int>();
            list.Add(1);
        }
        else
        {
            //append
            list.Add(12);
        }
        //Rest of the code
    }
private static void Main()
{
列表i=空;
检查表(out i,i);
Console.WriteLine(i[0]);
}
公共静态无效检查表(列表外列表、列表同列表)
{
列表=sameList;
if(list==null)
{
//初始化
列表=新列表();
增加第(1)款;
}
其他的
{
//附加
增加(12);
}
//代码的其余部分
}
为什么不使用包装器

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
}
public void CheckListWrapper(参考列表)
{
if(list==null)
{ 
检查表(外名单);
}
其他的
{
//附加任何东西
}
}
公共作废清单(外名单)
{
list=list();
//代码的其余部分
}

所以你的报价中有答案。。。你可能想改用
ref
,我不想。我想让打电话的人来决定。如果输入未初始化,则此方法将初始化列表并向其中添加变量,否则,它将只向现有列表中添加新变量。您不能。null并不意味着没有初始化。它被初始化为null。如果您想检查null,那么使用ref-它将强制函数的用户传递一个初始化的变量。然后,您可以检查它是否初始化为null,如果是,则初始化为空列表。此外,将初始化变量传递给out参数也没有意义。你不能在函数中使用它,因为你只需要在函数中初始化它。当函数退出时,它将被初始化。看起来唯一的选项是强制调用者输入一个初始化的数组并使用
ref
。它让我
使用未分配的参数“myList”
编辑代码。请看。如果被否决,获得积极的反馈会很好,但你需要两种方法。问题的目的是,是否有一个选项来确定
列表
参数(已初始化/未初始化)的状态。我没有否决你的答案。ref和out没有方法重载。它们在IL水平上具有相同的特征。您可以使用list和ref list查看与参数相同的方法名称,我已经编辑了答案。这是你能得到的最接近的结果,如果我有一个例子,当
list
的状态事先未知,或者方法想要接受这两个选项时,会怎么样?因为您不能定义只在
ref
out
上不同的重载方法。它是ref或out。使用前者可以传递一个实例,而另一个只能返回一个实例。如果您只返回,则可以考虑使用返回参数。我想使用OUT,传递一个实例。同时,我希望该方法能够接受初始化的未初始化列表。然后改用ref。
list I=null在这种情况下,i是初始化变量。它被初始化为
null
。我正在寻找某种方法,可以检查变量的状态(已初始化/未初始化)