我有一个方法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"";
}
感谢您的任何建议。
答案 0 :(得分:4)
你已经有了两个变量,尽管你不必要地初始化其中一个变量。只需使用:
public bool HasValidModel()
{
List<__ServiceInfo> lstAll;
var selectedServices = this.GetAllServices(out lstAll);
// Now use lstAll and selectedServices
}
就我个人而言,我真的不喜欢使用参数,并且如果可能的话会寻找替代设计,但这是一个单独的问题。 (我将单独找出所有服务来选择其中一些服务。)
答案 1 :(得分:3)
只需使用两个变量,如下所示:
List<__ServiceInfo> lst;
List<__ServiceInfo> lstSelected = GetSelectedServices(out lst);
“返回”对象现在由lstSelected
引用,而out
ed对象由lst
引用。
答案 2 :(得分:3)
您实施return
和out
参数的方式似乎没问题。但这个电话是错误的。 @Ken的答案指向了正确的方向。
然而GetSelectedServices
方法中的逻辑是奇怪的。 “选定”服务和“常规”服务之间的唯一区别是“常规”服务是NULL
。这导致allServices
列表是NULL的集合加上所选服务的结果。在我看来这没有任何意义。