我有接受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的列表并将附加元素添加到其中,或者在其他情况下初始化列表并向其中添加元素。
答案 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;
}
}
答案 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);