c# - Visual Studio Intellisense 不显示泛型重载的方法

标签 c# generics methods intellisense overloading

给定以下两个接口(interface)(这些是小例子,不是我的实际实现):

public interface IAssertion<T> {
     IAssertion<T> IsNotNull();
     IAssertion<T> Evaluate(Predicate<T> predicate)
}

public interface IStringAssertion : IAssertion<string> {
     IStringAssertion IsNotNullOrEmpty();
}

和一个将返回适当接口(interface)的静态工厂,例如:

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);
}

此代码编译并实际运行。我什至可以设置通过的测试,例如:

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()

但我什么也没看到。

我真的很想为重载保留相同的方法名称。由于 IAssertion 接口(interface)的 Evaluate 方法中的谓词,我想保留泛型重载。

此外,我知道我可以使用扩展方法做一些接近此的事情,但这不是一个选项,因为我仍然想支持 .Net 2.0 并希望保持流畅的 api。

更新:

有一些很好的答案涉及 Visual Studio 的第三方加载项。不幸的是,由于我正在开发的公司繁文缛节,我无法安装或购买 Visual Studio 的附加工具。 (我讨厌政治!)

我正在寻找可在 Visual Studio 2005 和 Visual Studio 2008 中运行的纯代码选项。

更新:

这适用于 Visual Studio 2008。谢谢,Luke .那只剩下 Visual Studio 2005。

最佳答案

我相信这是因为 Intellisense 看到了与通用类型同名的项目,然后才懒得去寻找 intellisense 属性,直到你给它一个类型。例如,如果您将鼠标悬停在“Require.That(string)”上,Visual Studio 会将其报告为 IAssertion,而不是 IStringAssertion .

无论如何,您可以将 IStringAssertion 的“That”重命名为“ThatString”。 IE。

public static class Require
{

    public static IStringAssertion ThatString(string value)
    {
        return null;
    }

    public static IAssertion<T> That<T>(T value)
    {
        return null;
    }

}

public class RAR
{
    public void TestMethod(StringComparer a, string b)
    {
        Require.That<StringComparer>(a).IsNotNull();
        Require.ThatString(b).IsNotNullOrEmpty();
    }
}

可能不理想,但我认为除了使用不同的方法名称之外,在代码前端没有任何解决方法。

关于c# - Visual Studio Intellisense 不显示泛型重载的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1763366/

相关文章:

java - 作为原始类型 'forEach()' 的成员对 'java.lang.Iterable' 进行未经检查的调用

c# - 更新 2D 相机的 Y 位置和 X 位置

c# - 当我循环读取数据库中的行时,如何更新它们?

java - MultiSet.Entry 和泛型的比较器

c# - .Net Razor - 在页面之间共享变量

c# - 具有泛型参数和抽象类的泛型

javascript - 我的 ajax post 方法有效,但我无法通过 php 捕获该值

javascript - 我们何时使用 preventDefault 方法重要吗?

C# HTTP 在获取正文之前发布和只读响应的 header

c# - EF Core,投影子集合预加载