【发布时间】:2011-10-11 06:44:56
【问题描述】:
我有一个方法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"";
}
感谢您的任何建议。
【问题讨论】:
-
所以基本上,“all”包含选定的所有内容,然后是一堆
null条目? -
看来
GetSelectedServices正在为“全部”和“选定”返回相同的列表——假设service永远不是null。如果有任何空值,那么你的结果就更奇怪了。 -
您的程序违反了 C# 规范的第 2.4.2 节; 编写一个标识符中有两个连续下划线的程序是最糟糕的做法,除非您在框架或编译器的实现团队中。
-
@Eric:一般来说这是一个值得的做法吗?如果是这样,为什么你们内部有这个约定?只是好奇。我认为这是因为很难知道要为变量键入多少个下划线。
-
@JoanVenge:我们希望您避免在标识符中放置两个下划线,因为我们保留在未来通过创建包含两个下划线的新关键字来进行重大更改的权利。例如,
__arglist是 C# 的未记录关键字。如果我们决定在 C# 中创建一个保留__ServiceInfo的功能,那么这个问题中的代码将在重新编译时被破坏。为了您自己的安全,您应该避免使用任何包含__的标识符。
标签: c# parameters return out