gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:10:10 26 4
gpt4 key购买 nike

给定以下两个接口(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com