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
。我正在寻找某种方法,可以检查变量的状态(已初始化/未初始化)