C# intellisense Visual Studio можно дать подсказку для отображения определенной перегрузки метода сначала?

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

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

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

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

10
задан Mike 15 December 2009 в 02:36
поделиться

4 ответа

Не думаю.

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

0
ответ дан 4 December 2019 в 04:21
поделиться
  1. Тег Summary в комментариях XML отображается в Intellisense.
  2. Вы можно украсить метод тегом Obsolete, который также будет генерировать предупреждение или ошибку в зависимости от настроек.

      [System.Obsolete ("используйте GetPrice (марка, модель, год)")]
    
2
ответ дан 4 December 2019 в 04:21
поделиться

Происходит следующее:

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

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

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

1
ответ дан 4 December 2019 в 04:21
поделиться

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

    /// <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
ответ дан 4 December 2019 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: