Tar*_*rec 10 c# initialization out
为什么是下面的代码
private static List<WorkflowVariableDataSet> MergeDatasetsListBranch(out List<WorkflowVariableDataSet> datasetsList)
{
if(datasetsList == null)
datasetsList=new List<WorkflowVariableDataSet>();
datasetsList=new List<WorkflowVariableDataSet>();
return datasetsList;
}
Run Code Online (Sandbox Code Playgroud)
在第一个if语句处生成错误:
Out parameter 'datasetsList' might not be initialized before accessing.
Run Code Online (Sandbox Code Playgroud)
我知道它现在应该是未初始化的,但是这个词might表明错误在于可能未初始化的对象访问(当它甚至没有被访问时,它是引用,被检查).Ofc不会发生ref关键字,但我很好奇参考检查是如何违反out-parameters策略的.
编辑 我编辑了问题和示例:无论如何,out对象将在方法内初始化.问题是:为什么未初始化的对象不能为空?这有什么不同于:
object o;
if(o==null)
...
Run Code Online (Sandbox Code Playgroud)
Tim*_*ter 18
使用未分配的out参数'parameter'编译器无法验证
out参数在使用之前是否已赋值; 分配时,其值可能未定义.在访问该值之前,请务必为被调用方法中的out参数赋值.如果需要使用传入的变量的值,请改用ref参数.
因此将out参数视为未分配.你是负责任的人.
所以只需删除if:
datasetsList = new List<WorkflowVariableDataSet>();
Run Code Online (Sandbox Code Playgroud)
如果要处理传递给此方法的列表,请使用refintead(如上所述):