而不是重載一個函數100次或爲不同的類型創建100個不同的比較器我決定檢查一個函數內的類型。什麼是檢查類型的最快方法?
例如,我使用默認比較器來比較2個對象中的一組類型(基元和字符串)的值。它包含以下代碼:
public class DefComparer : IComparer<object> {
public int Compare(object a, object b) {
.... // a = a.GetType().GetField(field).GetValue(a); - not important for the question but I'm just showing that a&b below are different references
switch (a.GetType().Name) {
case "Byte":
if ((byte)a == (byte)b) return 0;
else if ((byte)a > (byte)b) return 1;
else return -1;
case "UInt16":
if ((ushort)a == (ushort)b) return 0;
else if ((ushort)a > (ushort)b) return 1;
else return -1;
case "SByte":
if ((sbyte)a == (sbyte)b) return 0;
else if ((sbyte)a > (sbyte)b) return 1;
else return -1;
case "Int16":
...
這裏我使用的是switch
聲明被認爲是比if
/else
語句鏈更快。但a.GetType().Name
返回一個動態獲取的字符串,此方法涉及字符串比較。這聽起來並不特別快。我需要比較器的速度儘可能快,因爲它將用於大量的數據集合。
問:有沒有更快的方法來檢查對象的類型(不涉及字符串比較)?什麼是最快的方法?
您正在尋找'Comparer.Default'。 – SLaks
或者調用((IComparable)a).CompareTo(b) – usr
不,我不是在尋找'Comparer.Default'。我編輯了我的帖子,使其更加清晰。我的問題是關於檢查類型的快速方法。 – brandon