Может ли Visual Studio С# intellisense дать подсказку, чтобы сначала отобразить некоторую перегрузку метода?

У меня есть два метода, которые являются перегрузками друг друга

public class Car
{
   public int GetPrice(string vinNumber)
   {
      string make = Database.GetMake(vinNumber);  // expensive operation
      string model = Database.GetModel(vinNumber);   // expensive operation
      int year = Database.GetYear(vinNumber);   // expensive operation

      return this.GetPrice(make, model, year);
   }

   public int GetPrice(string make, string model, int year)
   {
      // Calculate value and return
   }
}

В моем примере перегрузка GetPrice (make, model, year) дешева для выполнения, но метод GetPrice (vinNumber) стоит дорого. Проблема в том, что дорогой метод имеет наименьшие параметры, и он появляется сначала в С# intellisense.

Оба метода действительны, но я хочу призвать людей назвать дешевый метод. Но люди, как правило, не просматривают все перегрузки в Intellisense, прежде чем выбирать метод для вызова, а дорогостоящий вызов часто возникает в моей кодовой базе.

Есть ли способ сказать Visual Studio дать "приоритет intellisense" конкретному методу, чтобы он отображался первым?

Ответ 1

Не думай так.

Если вы не написали плагин intellisense (например, Resharper) и не захватили по умолчанию intellisense и не создали программу для пользователей, чтобы назначить приоритет.

Ответ 2

  • Сводный тег в комментариях XML отображается в Intellisense.
  • Вы можете украсить метод тегом Obsolete, который также будет генерировать предупреждение или ошибку в зависимости от настроек.

    [System.Obsolete("use GetPrice(make, model, year)")]
    

Ответ 3

Что происходит:

  • Когда вы вводите элемент или выделяете его в списке, единственная перегрузка, которую вы видите, - это первая, указанная в коде.
  • После того, как вы примете член и находитесь в круглых скобках, порядок, по-видимому, основан на количестве параметров, от наименьшего до самого.

То, что вы могли бы подумать, это вместо перегрузок, именования членов одинаковыми в начале и разными в конце (GetMake vs GetMakeSlow, но, очевидно, что-то лучше этого), чтобы они отображались вместе в Intellisense но он сообщил, что вы должны использовать.

В противном случае сделайте их истинными перегрузками, но используйте XML-документацию, чтобы поставить ясное предупреждение на медленное.

Ответ 4

Единственное решение, которое я могу предложить, это комментарии, но это не значит, что пользователь обратит на них внимание:

    /// <summary>
    /// This method should be used as a last resort...
    /// </summary>
    /// <param name="vinNumber"></param>
    /// <returns></returns>
    public int GetPrice(string vinNumber)
    {
        ...
    }

    /// <summary>
    /// This is the preferred method...
    /// </summary>
    /// <param name="make"></param>
    /// <param name="model"></param>
    /// <param name="year"></param>
    /// <returns></returns>
    public int GetPrice(string make, string model, int year)
    {
        ...
    }

Изменить: Я пробовал это, это не имело никакого значения:

class Class1
{
    public static void Method(int value1) { }
    public static void Method(int value1, int value2) { }
    public static void Method(int value1, int value2, int value3) { }
}

class Class2
{
    public static void Method(int value1, int value2, int value3) { }
    public static void Method(int value1, int value2) { }
    public static void Method(int value1) { }
}