Учитывая следующие два интерфейса (это небольшие примеры, не моя фактическая реализация):Visual Studio Intellisense не показывает методы по общей перегрузки
public interface IAssertion<T> {
IAssertion<T> IsNotNull();
IAssertion<T> Evaluate(Predicate<T> predicate)
}
public interface IStringAssertion : IAssertion<string> {
IStringAssertion IsNotNullOrEmpty();
}
и статический завод, который будет возвращать соответствующий интерфейс, например:
public static class Require {
public static IAssertion<T> That<T>(T value) {
...
}
public static IStringAssertion That(string value) {
...
}
}
я должен быть в состоянии сделать следующее:
public void TestMethod(SomeClass a, string b) {
Require.That(a).IsNotNull();
Require.That(b).IsNotNullOrEmpty().Evaluate(SomeMethodThatAcceptsString);
}
Thi s компилируется и будет выполняться. Я даже могу настроить тесты, которые проходят, например:
Assert.IsInstanceOf<IStringAssertion>(Require.That(string.Empty));
Assert.IsNotInstanceOf<IStringAssertion>(Require.That(new object());
Проблема Я бегу в и весь смысл этого вопроса, является то, что Visual Studio 2005 IntelliSense не решает различия между ними.
Когда я типа Require.That("...").
я должен ожидать, чтобы увидеть список
Evaluate(Predicate predicate) IsNull() IsNotNullOrEmpty()
, но вместо этого я ничего не вижу.
Мне бы очень хотелось оставить одно и то же имя метода для перегрузок. Я хочу сохранить общую перегрузку из-за предиката в методе Evaluate интерфейса IAssertion.
Кроме того, я знаю, что могу сделать что-то близкое к этому с помощью методов расширения, но это не вариант, потому что я все еще хочу поддерживать .NET 2.0 и хотел бы сохранить свободный api.
Обновлено:
Там были некоторые хорошие ответы, которые включают сторонние дополнения к Visual Studio. К сожалению, я не могу устанавливать или приобретать дополнительные инструменты для Visual Studio из-за корпоративной бюрократии, которую я разрабатываю. (Я ненавижу политику!)
Ищу кода единственный вариант, который будет работать как в Visual Studio 2005 и Visual Studio 2008.
Обновлено:
Это работает в Visual Studio 2008. Спасибо, Luke. Это оставляет только Visual Studio 2005.
Пытается нажать Ctrl + пробел после знака точки? –
Да и ничего. Я где-то читал, что резольвер, который использует VS для заполнения списка методов для Intellisense, несколько ленив. Я просто надеялся, что в моем коде есть что-то, что поможет создать правильный список. – Jason
Хммм, intellisense, похоже, подбирает все, как ожидалось для меня, используя VS2008SP1. – LukeH