是否可以使用'return'和& # 39;本# 39;同一时间

本文关键字:同一时间 return 是否 可以使 | 更新日期: 2023-09-27 18:10:59

我有一个方法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"";
}

谢谢你的建议。

是否可以使用'return'和& # 39;本# 39;同一时间

您已经有了两个变量,尽管您对其中一个进行了不必要的初始化。只使用:

public bool HasValidModel()
{
    List<__ServiceInfo> lstAll;
    var selectedServices = this.GetAllServices(out lstAll);
    // Now use lstAll and selectedServices
}

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

只使用两个变量,像这样:

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

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

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

然而,GetSelectedServices方法中的逻辑是奇怪的。"选定"服务和"常规"服务之间的唯一区别是"常规"服务是NULL。这导致allServices列表是null加上所选服务的集合。这在我看来毫无意义。