我被困在VB.net 2.0中,我想排序List(Of MyObject)
。我可以很容易地使用LINQ,但是因爲我回到過去只使用Framwork 2.0,我必須說我不知道如何做到這一點。什麼是最好的方法來做到這一點?使用VB.net 2.0的多處理器
我可以有很多SortFields以及沒有......這一切,因爲用戶可以選擇他想要排序字段。
我搜索了很多有關的IComparer但只做到這一點對一個領域,沒有多少......如果我充分理解它是如何工作的。
我該怎麼辦?
我被困在VB.net 2.0中,我想排序List(Of MyObject)
。我可以很容易地使用LINQ,但是因爲我回到過去只使用Framwork 2.0,我必須說我不知道如何做到這一點。什麼是最好的方法來做到這一點?使用VB.net 2.0的多處理器
我可以有很多SortFields以及沒有......這一切,因爲用戶可以選擇他想要排序字段。
我搜索了很多有關的IComparer但只做到這一點對一個領域,沒有多少......如果我充分理解它是如何工作的。
我該怎麼辦?
看看創建一個Comparer做比較的方法。
例如,創建一個使用兩個字段一個比較器:(這是C#,因爲我的VB是有點生疏):
class MyCustomComparer: Comparer<MyObject>
{
public override int Compare(MyObject obj1, MyObject obj2)
{
int rslt = obj1.field1.CompareTo(obj2.field1);
if (rslt != 0)
{
rslt = obj1.field2.CompareTo(obj2.field2);
}
return rslt;
}
}
然後,您可以創建這些對象之一,並把它傳遞給List.Sort
重載,需要比較功能。
當用戶可以指定字段和排序順序時,事情會變得更加複雜一些。我一直在做PASE是創建可以比較每個字段的方法,例如:
private int CompareField1(MyObject obj1, MyObject obj2)
{
return obj1.field1.CompareTo(obj2.field1);
}
private int CompareField2(MyObject obj1, MyObject obj2)
{
return obj1.field2.CompareTo(obj2.field2);
}
我在構造函數創建的函數引用的列表,每個字段的用戶指定。它看起來是這樣的:
private List<Func<MyObject, MyObject, int>> compares;
public MyCustomComparer(List<int> fieldsToCompare)
{
compares = new List<Func<MyObject, MyObject, int>>();
for (int i = 0; i < fieldsToCompare.Count; ++i)
{
switch (fieldsToCompare[i])
{
case 1: compares.Add(CompareField1); break;
case 2: compares.Add(CompareField2); break;
// other fields here
}
}
}
你CompareTo
方法,那麼,通過compares
列表循環:
public override int Compare(MyObject obj1, MyObject obj2)
{
for (int i = 0; i < compares.Count; ++i)
{
int rslt = compares[i](obj1, obj2);
if (rslt != 0) return rslt;
}
return 0;
}
這不是特別漂亮,但它是相當有效的。
即使.NET 2.0也有List.Sort
。
爲了通過數據的多個字段進行排序,適應比較器由場連續進行排序:如果第一個比較是相等的,由第二去;如果那是平等的,那就走第三條;等等。
沒問題,我在技術上更具C#程序員比VB.net,但必須與VB.net這些天的工作。我看到了這一點,但知道這是可以做到的了'.Orderby(函數(F1)f1.MyField1).ThenBy(函數(F2)f2.MyFields)'使用LINQ,我想知道是否有這樣做的最簡單的方法在2.0中。但似乎我沒有別的選擇。謝謝 –