1.First я определил метод расширения для IEnumerable.Add() как код нижеПосле повышения IEnumerable.OrderBy() исходный список не был отсортирован, почему?
public static IEnumerable<T> Add<T, TKey>(this IEnumerable<T> enumerable, T value, Func<T, TKey> orderBy)
{
if (enumerable == null)
return null;
if (enumerable is IList<T>)
{
var list = enumerable as IList<T>;
if (!enumerable.Contains(value))
{
list.Add(value);
enumerable = enumerable.OrderBy(orderBy);
}
}
}
2.Then, я поднял метод расширения, как это для сортировки ITEMLIST согласно свойству «Дата» когда новый пункт был добавлен в список:
itemList.Add(item, o => o.Date);
3.После все, оказывается, что «ITEMLIST» не был отсортирован.
4.I следовал за методом расширения и обнаружил, что «enumerable» был новым экземпляром после «enumerable = enumerable.OrderBy (orderBy)», и он был отсортирован, но «список» не был.
5. Затем я попытался перечислить отсортированные перечислимые как «list = enumerable.ToList()», оба из них («перечисляемые» и «список») были отсортированы.
6. После этого, когда стек вызовов вернулся к «itemList.Add (item, o => o.Date);», «itemList» не был отсортирован вообще !!!
Любой может дать мне несколько советов? Спасибо loooooooooooooooooooooooooooooooooot !!
Спасибо за ваше время! Вы имеете в виду, что «перечислимый» был передан как «значение», а не «Ref»? Но мне учили, что все типы классов являются типами «Ref» ... Не могли бы вы дать мне дополнительную информацию? 't open ... – Claw
Полная ссылка: http://www.yoda.arachsys.com/csharp/parameters.html –
Спасибо большое! Теперь я понял. Метод (T t) и метод (ref T t) различны. В первом случае мы можем изменить t.Property, но не t, когда я создаю новый экземпляр в t, исходный источник не изменится.В другом случае все изменения, включая свойство или новый экземпляр, будут влиять на исходный источник. Спасибо снова! Это действительно полезно! – Claw