我对该程序的输出感到困惑。从代码来看,这是一个真实的场景,但是我设法将其简化为以下内容:
class Program
{
static void Main(string[] args)
{
Dummy obj = new Dummy();
obj.FillList();
obj.MyPublicMethod();
}
}
public class Dummy
{
public Dummy()
{
NamesCollection = new List<string>();
}
public ICollection<string> NamesCollection { get; set; }
private List<string> _names;
public List<string> Names
{
get
{
//return _names ??
// (_names = NamesCollection.ToList());
if (ReferenceEquals(_names, null))
{
_names = NamesCollection.ToList();
}
if (_names.Count != NamesCollection.Count)
{
_names.Clear();
_names.Add("Aamir");
}
return _names;
}
set { _names = value; }
}
public void FillList()
{
this.NamesCollection.Add("Atif");
this.NamesCollection.Add("Ali");
this.NamesCollection.Add("haris");
this.Names.Add("Asif");
}
public void MyPublicMethod()
{
foreach (var item in Names)
{
Console.WriteLine(item);
}
//I am thinking that output should be:
//Atif
//Ali
//haris
//Aamir
//But the output that I am getting is only:
//Aamir
}
}
问题出在您的MyPublicMethod方法中。当您执行时foreach (var item in Names){}
,将获取get的执行方法Names
。_names.Count = 4
但是NamesCollection.Count = 3
。所以_names
要清除。并添加“ Aamir”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句