Как вернуть из метода Generic-делегат?

Есть следующий код:

delegate bool CompareDyn<T>(T a, T b);

public enum SorterType
{
            AGE,
            ARTICLE,
            ARTICLE_NUM,
            DATE_DETENTION,
            GENDER,
            HEIGHT,
            ID,
            NAME,
            TERM,
            WEIGHT
}

static CompareDyn<???> GetFunction(SorterType type) //тут ошибка, не знаю что указать в <>
{
     switch (type)
     {
        case SorterType.AGE:
        case SorterType.ARTICLE_NUM:
        case SorterType.DATE_DETENTION:
        case SorterType.ID:
        case SorterType.TERM: return Compare<int>;
        case SorterType.HEIGHT:
        case SorterType.WEIGHT: return Compare<float>;
        case SorterType.ARTICLE:
        case SorterType.NAME: return Compare<string>;
        default:
            return null;
     }
}

public static bool Compare<T>(T val_1, T val_2)
{
   dynamic dVal_1 = val_1, dVal_2 = val_2;

   int compare = dVal_1.CompareTo(dVal_2);

   bool bCompare = false;

   if (compare > 0)
   {
      bCompare = true;
   }

   return bCompare;
}

Я хочу чтобы делегат указывал на генерик-метод, получаемый из GetFunction, в зависимости от enum значения. Но возникает ошибка:

CS0305 Using the generic type 'Sorter.CompareDyn' requires 1 type arguments

То есть я что-то должен указать в <> чтобы это работало. Есть ли выход из этой ситуации?


Ответы (0 шт):