這裏有一個雙重問題。我需要對列表<>進行排序,我知道它包含派生類的對象到列表最初聲明爲包含該列表的類。 AND,我需要根據該派生類中的方法的返回值進行排序,該類使用參數。請記住,我已經知道List包含所有派生類類型的對象。如何通過派生類方法對包含派生類對象的List <>進行排序
我在這裏創建了一些示例代碼來演示這個問題,因爲真正的代碼不能公開共享。請注意,我無法控制這裏的基本條件(即列表<>集合的聲明內容是父類,並且它包含派生類的對象,該派生類包含一個方法,該方法接受一個參數並返回值我需要通過排序收集)。所以,我懷疑我可以使用任何需要改變的建議。我認爲我需要的是一種指定(轉換?)列表中真正的東西的方法,以便我可以訪問在那裏定義的方法。但我肯定會接受其他想法。否則,我只剩下傳統的泡泡排序。謝謝。
public class Component
{
public int X;
public int Y;
}
public class ComponentList : List<Component>
{
// Other members that deal with Components, generically
}
public class Fence : Component
{
public int Distance(int FromX, int FromY)
{
int returnValue = 0;
// Caluclate distance...
return returnValue;
}
}
public class Yard : Component
{
// Yada yada yada
}
public class MyCode
{
public List<Component> MyFences;
public MyCode(List<Component> Fences, int FromX, int FromY)
{
// Sort the fences by their distance from specified X,Y
Fences.Sort((A as Fence, B as Fence) => A.Distance(FromX, FromY).CompareTo(B.Distance(FromX, FromY)));
// Or
List<Fence> sortedFences = MyFences.OrderBy(A => A.Distance(FromX, FromY)).ToList();
// Or ???
}
}
鑄造有什麼問題?或者你只是不知道轉換的語法 - https://msdn.microsoft.com/en-us/library/ms173105.aspx)? –
當「圍欄」確實包含一個不是圍欄的物體時會發生什麼? – Rob