內部排序,但你想通過數字來排序,可能是最好的辦法是實行IComparable
,然後將您的自定義排序代碼放在CompareTo
方法中。然後,您不必在每次要對列表進行排序時編寫更復雜的Lambda語句,只需在列表中調用Sort()
方法即可。
您也可以處理其中FileName
屬性不包含下劃線或null
,而不是在你的代碼OrderBy
獲得異常(這是將與大多數其他的答案中發生什麼情況)。
我做了一些其他的變化也 - 覆蓋ToString
方法,所以你可以很容易地顯示數值到控制檯窗口,並用自動屬性語法的FileName
屬性,因此我們可以刪除支持字段:
class xxx : IComparable<xxx>
{
public string FileName { get; set; }
public int CompareTo(xxx other)
{
// Short circuit if any object is null, if the
// Filenames equal each other, or they're empty
if (other == null) return 1;
if (FileName == null) return (other.FileName == null) ? 0 : -1;
if (other.FileName == null) return 1;
if (FileName.Equals(other.FileName)) return 0;
if (string.IsNullOrWhiteSpace(FileName))
return (string.IsNullOrWhiteSpace(other.FileName)) ? 0 : -1;
if (string.IsNullOrWhiteSpace(other.FileName)) return 1;
// Next, try to get the numeric portion of the string to compare
int thisIndex;
int otherIndex;
var thisSuccess = int.TryParse(FileName.Split('_')[0], out thisIndex);
var otherSuccess = int.TryParse(other.FileName.Split('_')[0], out otherIndex);
// If we couldn't get the numeric portion of the string, use int.MaxValue
if (!thisSuccess)
{
// If neither has a numeric portion, just use default string comparison
if (!otherSuccess) return FileName.CompareTo(other.FileName);
thisIndex = int.MaxValue;
}
if (!otherSuccess) otherIndex = int.MaxValue;
// Return the comparison of the numeric portion of the two filenames
return thisIndex.CompareTo(otherIndex);
}
public override string ToString()
{
return FileName;
}
}
現在,你可以叫Sort
您的名單:
List<xxx> list = new List<xxx>
{
new xxx {FileName = "13_a"},
new xxx {FileName = "8_a"},
new xxx {FileName = null},
new xxx {FileName = "1_a"},
new xxx {FileName = "zinvalid"},
new xxx {FileName = "2_a"},
new xxx {FileName = ""},
new xxx {FileName = "invalid"}
};
list.Sort();
Console.WriteLine(string.Join("\n", list));
// Output (note the first two are the empty string and the null value):
//
//
// 1_a
// 2_a
// 8_a
// 13_a
// invalid
// zinvalid
你是說你有,你想他們的名稱屬性進行排序類的列表?如果您展示了該類的代碼示例以及如何存儲它的實例,那將會很有幫助。 –
請展示您的課程以及價值的示例 –
您是否在文件名稱開頭討論'N_'數字? –