Может ли Visual Studio C # intellisense получить подсказку, чтобы сначала отобразить перегрузку определенного метода? - PullRequest
10 голосов
/ 15 декабря 2009

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

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 (марка, модель, год) выполняется дешево, но метод GetPrice (vinNumber) стоит дорого. Проблема в том, что дорогой метод имеет наименьшее количество параметров, и он отображается первым в intellisense C #.

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

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

Ответы [ 4 ]

2 голосов
/ 15 декабря 2009
  1. Тег Аннотация в комментариях XML отображается в Intellisense.
  2. Вы можете украсить метод с помощью тега «Устаревший», который также выдаст предупреждение или ошибку в зависимости от настроек.

    [System.Obsolete("use GetPrice(make, model, year)")]
    
1 голос
/ 15 декабря 2009

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

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

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

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

0 голосов
/ 15 декабря 2009

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

    /// <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) { }
}
0 голосов
/ 15 декабря 2009

Не думаю.

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

...