加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Out参数可能在访问之前未被初始化

发布时间:2020-12-15 03:58:23 所属栏目:百科 来源:网络整理
导读:为什么是下面的代码 private static ListWorkflowVariableDataSet MergeDatasetsListBranch(out ListWorkflowVariableDataSet datasetsList){ if(datasetsList == null) datasetsList=new ListWorkflowVariableDataSet(); datasetsList=new ListWorkflowVari
为什么是下面的代码
private static List<WorkflowVariableDataSet> MergeDatasetsListBranch(out List<WorkflowVariableDataSet> datasetsList)
{
    if(datasetsList == null)
        datasetsList=new List<WorkflowVariableDataSet>();
    datasetsList=new List<WorkflowVariableDataSet>();
    return datasetsList;
}

在第一个if语句中产生错误:

Out parameter 'datasetsList' might not be initialized before accessing.

我知道在这一点上它应该是未初始化的,但是这个词可能表明这个错误在于可能的未初始化的对象访问(当它甚至不被访问时,它是引用,被检查). Ofc不会用ref关键字发生,但我很好奇参考检查如何违反out-parameters策略.

编辑
我已经编辑了这个问题和示例:out对象将在方法内部初始化.问题是:为什么未初始化对象不能为空比较?怎么不同于:

object o;
if(o==null)
    ...

解决方法

Compiler Error CS0269

Use of unassigned out parameter ‘parameter’ The compiler could not
verify that the out parameter was assigned a value before it was used;
its value may be undefined when assigned. Be sure to assign a value to
out parameters in the called method before accessing the value. If you
need to use the value of the variable passed in,use a ref parameter
instead.

所以把一个外部参数视为未分配的.你是负责任的人.

所以只要删除if:

datasetsList = new List<WorkflowVariableDataSet>();

如果要处理传递给此方法的列表,请使用ref intead(如上所述):

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读