0

我有一个GetSelectedServices()从树列表返回选定节点的方法,期望以相同的方法返回选定节点和我尝试添加out参数的所有节点。

但是当我调用这个方法时,我应该给出 out 参数,所以返回的带有 selectedNodes 的列表被屏蔽了,我不能拥有它。

我的方法

internal List<__ServiceInfo> GetSelectedServices(out List<__ServiceInfo> lstAll)
{
    List<__ServiceInfo> lstSelected = new List<__ServiceInfo>();
    List<__ServiceInfo> lstA = new List<__ServiceInfo>();

    foreach (TreeListNode node in this.tlServices.Nodes)
    {
        if (node.Checked)
        {
            var service = this.tlServices.GetDataRecordByNode(node) as __ServiceInfo;
            lstA.Add(service);

            if (service != null)
            {
                lstSelected.Add(service);
            }

            if (node.Nodes.Count > 0)
            {
                foreach (TreeListNode subNode in node.Nodes)
                {
                    if (subNode.Checked)
                    {
                        service = this.tlServices.GetDataRecordByNode(subNode) as __ServiceInfo;
                        lstA.Add(service);

                        if (service != null)
                        {
                            lstSelected.Add(service);
                        }
                    }
                }
            }
        }
    }
    lstAll = lstA;

    return lstSelected;
}

我调用方法的方式

public bool HasValidModel()
{
    List<__ServiceInfo> lstAll = new List<__ServiceInfo>();
    //here I get all nodes
    var allServices = this.GetAllServices(out lstAll);

    List<__ServiceInfo> lstSelected = new List<__ServiceInfo>();
    //but how to get the list from  ""return lstSelected"";
}

谢谢你的任何建议。

4

3 回答 3

4

您已经有两个变量,尽管您不必要地初始化其中一个。只需使用:

public bool HasValidModel()
{
    List<__ServiceInfo> lstAll;
    var selectedServices = this.GetAllServices(out lstAll);

    // Now use lstAll and selectedServices
}

就我个人而言,我不太喜欢使用 out 参数,如果可能的话,我会寻找替代设计,但这是另一回事。(我会将查找所有服务与选择其中一些服务分开。)

于 2011-10-11T06:49:19.023 回答
3

只需使用两个变量,如下所示:

List<__ServiceInfo> lst;
List<__ServiceInfo> lstSelected = GetSelectedServices(out lst);

'return'ed 对象现在由 引用lstSelected,而outed 对象由 引用lst

于 2011-10-11T06:50:26.297 回答
3

您实现returnout参数的方式似乎很好。但是调用是错误的。@Ken 的回答指向了正确的方向。

然而,该GetSelectedServices方法的逻辑很奇怪。“选择”服务和“常规”服务之间的唯一区别是“常规”服务是NULL. 这导致allServices列表是 NULL 和所选服务的集合。在我看来,这没有任何意义。

于 2011-10-11T06:51:54.263 回答