C# 목록 Orderby는 항상 널 리턴
-
06-07-2019 - |
문제
여기 내 설정이 있습니다.
public class ItemList : List<Item>
{
public void Load() {...}
public void Save() {...}
}
XML 파일에서로드를 읽으려면 itemList를 채우십시오.
그런 다음 우선 순위로 항목 목록을 주문하려고합니다. 이것은 int입니까? 그러나 테스트 목적으로 모든 항목의 값이 다릅니다.
ItemList itemList = new ItemList();
itemList.Load();
ItemList newItemList = itemList
.OrderBy(item => item.Priority) as ItemList;
return newItemList;
위의 NewItemList는 항상 무효입니다. ItemList의 카운트는 7입니다. 트리플 확인했으며 ItemList 인스턴스의 모든 항목에는 우선 순위가 설정되어 있습니다.
내가 뭘 잘못하고 있죠?
나는 또한 시도했다 ...
ItemList newItemList = itemList
.OrderBy(item => item.Priority)
.ToList() as ItemList;
아무것도 작동하지 않는 것 같습니다.
미리 감사드립니다!
해결책
Orderby 또는 Tolist는 Itemlist를 반환하지 않으므로 Joseph가 지적한 것처럼 캐스팅은 Null을 반환합니다.
당신이 상속 할 때 List<T>
클래스, 정렬 방법을 사용하여 정렬 할 수 있습니다.
ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;
다른 팁
문제는 OrderBy가 ItemList를 반환하지 않고 iOrderEdEnumerable을 반환하고 Tolist ()가 ItemList를 반환하지 않고 목록을 반환한다는 것입니다. 어느 쪽이든, 당신은 그들이 아닌 항목 목록에 둘 다 캐스팅하려고합니다. 그래서 당신은 null을 얻습니다.
ItemList someList = (new ItemList {new Item(2), new Item(1), new Item(3)});
//this returns an IOrderedEnumerable<Item>
var result = someList.OrderBy(i => i.Priority);
//this returns a List<Item>
var otherResult = someList.ToList();
나는 당신의 문제가 "ItemList"라고 생각합니다.
LINQ 연산자는 NewItemList 객체에서 내내 작동하지 않습니다. 그들은 새로운 물체를 만들고 반환합니다. 장소에서 정렬을하려면 List <>의 정렬 () 메소드를 사용해야합니다.
제휴하지 않습니다 StackOverflow