public class CNode:INode
{
private List<INode> myChildren = new List<INode>();
public CNode(string SName)
{
Name = SName;
}
public string Name { get; set; }
public void AddChild(INode node)
{
myChildren.Add(node);
} public void RemoveChild(INode node)
{
myChildren.Remove(node);
} public List<INode> GetChildren(bool searchAll)
{
// List<INode> result = new List<INode>(myChildren);
List<INode> result = new List<INode>(myChildren);
if(searchAll)
{
foreach(INode node in myChildren)
{
List<INode> child = node.GetChildren(true);
if(child.Count>0)
{
result.AddRange(child);
}
}
}
return result;
} public List<INode> GetChildren()
{
return GetChildren(false);
}
}
在以上代码中,类CNode中一开始就定义了一个List<INode> myChildren ,
但是在后面GetChildren方法中由对result定义:List<INode> result = new List<INode>(myChildren);
我想问这个myChildren 不是已经定义过了吗?这里面对result定义完以后和myChildren 什么关系?
{
private List<INode> myChildren = new List<INode>();
public CNode(string SName)
{
Name = SName;
}
public string Name { get; set; }
public void AddChild(INode node)
{
myChildren.Add(node);
} public void RemoveChild(INode node)
{
myChildren.Remove(node);
} public List<INode> GetChildren(bool searchAll)
{
// List<INode> result = new List<INode>(myChildren);
List<INode> result = new List<INode>(myChildren);
if(searchAll)
{
foreach(INode node in myChildren)
{
List<INode> child = node.GetChildren(true);
if(child.Count>0)
{
result.AddRange(child);
}
}
}
return result;
} public List<INode> GetChildren()
{
return GetChildren(false);
}
}
在以上代码中,类CNode中一开始就定义了一个List<INode> myChildren ,
但是在后面GetChildren方法中由对result定义:List<INode> result = new List<INode>(myChildren);
我想问这个myChildren 不是已经定义过了吗?这里面对result定义完以后和myChildren 什么关系?
解决方案 »
- FileStream的Read中的offset为什么只能从0开始
- 第一次在三层中用girdview,谁帮我写下cs代码!!!进来帮帮新手吧!!!
- 数据库连接基础知道。望高手指点。
- 请教windows workflow foundation持久化服务的保存数据问题。
- 焦点问题
- 求Http1.1中文文档 500分
- 不是合法的OleAut日期?
- new修饰符只能用于嵌套的类,表示对继承父类同名类型的隐藏。
- C#程序调用外部程序(Python程序)并后台执行外部程序button按钮事件,烦请高手进来指导指导
- C# Winfrom 中ToolStripMenuItem 鼠标移动控件怎么去掉蓝条
- 新手求大佬帮助 C#编码问题,超过四个中文字符就出现问好
- C#如何使用SSL/TLS链接到RabbitMQ服务器
这是 List<> 的带参数实例化方法的功能。学习 .net 要看源代码,不要仅仅纠结概念。只有读源代码、自己写测试程序,才是准绳。一切理论都不是真理。
这是 List<> 的带参数实例化方法的功能。学习 .net 要看源代码,不要仅仅纠结概念。只有读源代码、自己写测试程序,才是准绳。一切理论都不是真理。好的明白了,请问源代码是指什么?点进去各个函数看定义里面的内容吗?
{
if (collection == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.collection);
}
ICollection<T> collection2 = collection as ICollection<T>;
if (collection2 == null)
{
this._size = 0;
this._items = List<T>._emptyArray;
using (IEnumerator<T> enumerator = collection.GetEnumerator())
{
while (enumerator.MoveNext())
{
this.Add(enumerator.Current);
}
}
return;
}
int count = collection2.Count;
if (count == 0)
{
this._items = List<T>._emptyArray;
return;
}
this._items = new T[count];
collection2.CopyTo(this._items, 0);
this._size = count;
}慢慢你会发现,程序员分为两种,一种就是只会抄,一种就是自己找源码分析。
是从已有的 myChildren 集合创建一个新集合 result 的意思看不看源码并无所谓,但看原型声明就很重要
方法重载太多了感觉都记不住
其实 vs 提供了强大的帮助功能,只要你按你想象的方式书写代码,vs 就会立即告诉你是否合适(如果不行,你可以自行扩展)
这里,并不需要什么记忆做软件开发,需要的是天马行空,而不是亦步亦趋
//
// 摘要:
// 初始化 System.Collections.Generic.List`1 类的新实例,该实例包含从指定集合复制的元素并且具有足够的容量来容纳所复制的元素。
//
// 参数:
// collection:
// 一个集合,其元素被复制到新列表中。
//
// 异常:
// T:System.ArgumentNullException:
// collection 为 null。
也有不少人,甚至是有开发经验的人,喜欢把.net类库的一些方法,挑挑拣拣,再封装成自己的一个类库,我觉得这种做法毫无意义。
为什么这么做,就是因为觉得方法太多,记不住,所以挑一些常用的进行封装。但我觉得这不是好的对.net类库的用法。
好的用法应该是这样:
碰到一个问题,首先想:我觉得应该用xxxx的办法可以简单的解决问题,然后到类库里找相应的重载方法。找不到,才再自己封装。