using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Comparer.csd
{
class Program
{
/* Confusion is regarding how ToList() method works. Does it do the deep copy or shallow copy??
/**********OUTPUT
a a b
a b c
a c a
-----------------
a a b
a c a
-----------------
1
2
3
OUTPUT ENDS************/
static void Main(string[] args)
{
List<test> list = new List<test>();
list.Add(new test("a", "b", "c"));
list.Add(new test("a", "c", "a"));
list.Add(new test("a", "a", "b"));
/// sort the list based on first name and last name
IEnumerable<test> soretedCollection = from t in list
orderby t._fname ascending, t._mname ascending
select t;
Print(soretedCollection);
/// remove the first object from the list
list.RemoveAt(0);
/// print the list .
/// Removal of the item from the list is reflected here so I guess sorted collection and list both
/// are refering the same data structure
/// what if I will do
/// list = soretedCollection.ToList<test>(); /// is it going to change the reference of the list if some other object
/// is holding the reference??
Print(soretedCollection);
Dictionary<int, int> dic = new Dictionary<int, int>();
dic.Add(1, 1);
dic.Add(2, 1);
dic.Add(3, 1);
List<int> keys = dic.Keys.ToList<int>();
/// remove the dictionary entry with key=2
dic.Remove(2);
/// how come this time it did not remove the second item becuase it is removed from the dictionary.
for (int i = 0; i < keys.Count; ++i)
{
Console.WriteLine(keys[i].ToString());
}
Console.Read();
}
static void Print(IEnumerable<test> list)
{
foreach (test t in list)
{
t.Print();
}
Console.WriteLine("---------------------");
}
}
}
0
A
답변
4
. 이 목록의 실제 항목은 @Johannes Rudolph가 지적한 것과 같은 원래의 열거 형과 동일한 (동일한 객체 참조) - 그래서 그렇습니다 그것은 얕은 사본입니다.
IEnumerable<test>
생각됩니다 유유히 소스 모음을 통해 실행 - 만이 적극적으로 그 시점에서와 같이 열거 소스 수집을 취하는 열거를 생성합니다 (foreach
또는 .ToList()
를 사용하여 즉) 항목을 열거 할 때 즉, 열거자가 생성되기 전에 기본 컬렉션에 변경 사항이있는 경우 열거 형에 반영됩니다.
3
ToList
항상 목록의 단순 복사본을 만드는 것, 즉 반환 된 목록 IEnumerable
이하는 소스로 같은 객체를 참조하는 것입니다,하지만 목록이 원본의 복사본입니다 돌아왔다.
MSDN을 참조하십시오. 이 결과는 원래 열거 별도의 목록, 그래서 .ToList()
후 변경 사항이이 목록에 반영되지 않습니다 - .ToList()
세력 전체 열거 열망 실행을 호출
완벽한 ... 알겠습니다 ... 감사합니다. – mchicago