Compte tenu des deux interfaces suivantes (ce sont de petits exemples, pas ma mise en œuvre effective):IntelliSense Visual Studio ne pas montrer les méthodes de surcharge générique
public interface IAssertion<T> {
IAssertion<T> IsNotNull();
IAssertion<T> Evaluate(Predicate<T> predicate)
}
public interface IStringAssertion : IAssertion<string> {
IStringAssertion IsNotNullOrEmpty();
}
et une usine statique qui renverra l'interface appropriée, par exemple:
public static class Require {
public static IAssertion<T> That<T>(T value) {
...
}
public static IStringAssertion That(string value) {
...
}
}
Je devrais pouvoir faire ce qui suit:
public void TestMethod(SomeClass a, string b) {
Require.That(a).IsNotNull();
Require.That(b).IsNotNullOrEmpty().Evaluate(SomeMethodThatAcceptsString);
}
Thi Le code s compile et s'exécutera réellement. Je peux même mettre en place des tests qui passent, tels que:
Assert.IsInstanceOf<IStringAssertion>(Require.That(string.Empty));
Assert.IsNotInstanceOf<IStringAssertion>(Require.That(new object());
Le problème que je courais dans et toute la question de cette question, est que Visual Studio 2005 IntelliSense ne résout pas les différences entre les deux.
Quand je tape Require.That("...").
j'attendre à voir une liste des
Evaluate(Predicate predicate) IsNull() IsNotNullOrEmpty()
mais je ne vois rien. Je voudrais vraiment garder le même nom de méthode pour les surcharges. Je veux conserver la surcharge générique à cause du prédicat dans la méthode Evaluate de l'interface IAssertion.
En outre, je sais que je peux faire quelque chose de proche à cela en utilisant des méthodes d'extension, mais ce n'est pas une option parce que je veux toujours supporter .Net 2.0 et je voudrais garder l'API.
Mise à jour:
Il y a eu quelques bonnes réponses qui impliquent des tiers add-ons à Visual Studio. Malheureusement, je ne suis pas en mesure d'installer ou d'acheter des outils complémentaires pour Visual Studio en raison de la bureaucratie que je suis en train de développer. (Je déteste la politique!)
Je cherche un code unique option qui fonctionnera dans Visual Studio 2005 et Visual Studio 2008.
Mise à jour:
Cela fonctionne dans Visual Studio 2008. Merci, Luke. Cela ne laisse que Visual Studio 2005.
Vous essayez de taper ctrl + barre d'espace après le signe de point? –
Oui et rien. J'ai lu quelque part que le résolveur que VS utilise pour remplir la liste des méthodes pour Intellisense est un peu paresseux. J'espérais juste qu'il y avait quelque chose que je pouvais faire dans mon code pour l'aider à construire la bonne liste. – Jason
Hmmm, IntelliSense semble ramasser tout comme prévu pour moi, en utilisant VS2008SP1. – LukeH