Can-visualstudio';s C#intellisense会得到提示,首先显示某个方法重载吗?
我有两个互相重载的方法Can-visualstudio';s C#intellisense会得到提示,首先显示某个方法重载吗?,c#,visual-studio,intellisense,overloading,C#,Visual Studio,Intellisense,Overloading,我有两个互相重载的方法 public class Car { public int GetPrice(string vinNumber) { string make = Database.GetMake(vinNumber); // expensive operation string model = Database.GetModel(vinNumber); // expensive operation int year = Databas
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)方法执行起来很昂贵。问题在于,昂贵的方法参数最少,而且它首先出现在C#intellisense中
这两种方法都是有效的,但我想鼓励人们称之为廉价方法。但是,人们在选择调用方法之前,往往不会查看Intellisense中的所有重载,而且昂贵的方法在我公司的代码库中被调用的次数太多
有没有一种方法可以告诉VisualStudio将“智能感知优先级”赋予某个特定的方法,以便它首先显示出来?不这么认为
除非您编写intellisense插件(如Resharper)并劫持默认intellisense并创建一个程序供用户分配优先级。发生的情况如下:
- 当您键入成员或在列表中高亮显示它时,您看到的单个重载就是代码中首先列出的重载
- 接受成员并位于括号内后,顺序似乎基于参数的数量,从最少到最多
你可以考虑的是,不是重载,而是在开始时把成员命名为同一个,而在结尾时不同(<代码> GETFAX <代码> VS <代码> GetMakeSlow < /代码>,但显然比这更好一些),所以它们在智力上出现在一起,但这是你应该使用的。
否则,请将它们设置为真正的重载,但使用XML文档对慢速重载发出明确警告。我可以提供的唯一解决方案是注释,但这并不意味着用户会注意它们:
/// <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)
{
...
}
[System.Obsolete("use GetPrice(make, model, year)")]
好吧,我假设他在源文件中定义了一个类似于[property]的东西来“提示”Intellisense哪个重载优先。我不知道你的一般问题,但这个特定的情况可能可以通过命名来解决,例如,便宜版本的GetPrice和昂贵版本的QueryPrice或FetchPrice(提示它将与数据库对话)。只是一个想法。如果您需要保留昂贵的重载以保持兼容性,请使用EditorRowSableAttribute(EditorRowSableState.Never)标记它对Intellisense隐藏它。我想知道在那里进行三次数据库调用是否明智。当然,您可以编写一个查询,在只访问数据库一次时返回所需的所有数据。@itowlson:Does[EditorRowsableAttribute(EditorRowsableState.Never)]真的为你工作吗?科里:我已经让它跨程序集边界工作。它似乎在项目中不起作用。我想我也记得这一点,但快速测试显示较少的params=first。摘要显示在Intellisense中,但备注不显示(两者都将显示在生成的文档中)另外,#warning(警告)似乎不是一个好的选择,因为它在原始方法中显示为警告,而不是在调用它的地方。Kyralessa,我认为备注标记是Intellisense的一部分,但刚刚测试并确认它们不是。警告的要点很好,过时是实现该路线的方法。感谢您的输入,我编辑了我的答案,[Observe]属性将警告用户,但不会影响Intellisense排序(至少在我的Visual Studio 2012中不会)。
[System.Obsolete("use GetPrice(make, model, year)")]