2

当我写作时:

throw new ArgumentOutOfRangeException("")

将插入符号放在引号之间,然后按 Ctrl+Space 打开智能感知实际上会有所作为!

让我眼花缭乱的奇怪而美丽的事情是,它实际上建议了方法中的参数名称:

截屏

有人可以向我解释如何实现吗?

如何在这样的级别添加自定义智能感知?

更新: 正如一些人指出的那样——这种智能感知不会正常弹出。

我正在使用ReSharper 6.1,我可以控制是否在 ReSharper > Options > Intellisense > Autopopup > [C#] In string literals 中弹出智能感知。

不过,我想知道如何自己创建这样的智能感知。

4

6 回答 6

4

我想你应该看看这篇文章。此外,还有另一个与您的问题非常相似的Stack Overflow 问题,它也可能会给您一些提示。

我不知道如何具体实现,但我认为您甚至不需要使用反射,因为 Visual Studio 的“正常”IntelliSense 无需先构建项目即可工作。例如,只需向您的项目添加一个新类即可使其可用于 IntelliSense。我认为 ReSharper 使用了相同的机制。

于 2012-05-14T03:16:49.333 回答
4

Resharper 添加了许多有用的功能,这些功能远远超出了 Visual Studio 通过 Intellisense 为您提供的本机功能。例如,在 ASP.NET MVC 中,Resharper 会自动建议控制器操作名称:

// Resharper will give suggestions based on controller action names
@Html.Action("Show

在您的问题中,Resharper 已将ArgumentOutOfRangeException构造函数的参数标记为需要是当前方法的参数名称。因此,当您输入字符串时,它会建议当前方法的参数名称。

像这样编写自己的智能感知需要付出很多努力。你基本上是在复制 Jetbrains 的人们花费大量资源来制作 Resharper 的内容。

如果你想插入 Resharper 的 API 来创建你自己的插件,它会花费更少的精力,但它仍然很乏味。

但是,如果您只想编写自己的方法,该方法需要一个字符串参数作为调用方法的参数之一的名称,Jetbrains 允许您使用它们的External Annotations注释您的方法参数。在这种情况下,您将使用InvokerParameterNameAttribute.

于 2012-05-14T03:23:57.770 回答
3

似乎它与Resharper 智能感知选项有关

怎么做
1.使用 Resharper 插件
2.使用 CSharpIntellisense 库
3.优秀的博文和另一个

于 2012-05-14T03:14:01.010 回答
0

我看不到 Reflector 中的 ArgumentOutOfRangeException 或 ArgumentException 类型有什么特别之处,所以我猜这是在 Visual Studio 中硬编码的东西。猜测一下,我会尝试使用一个名为 String paramName 的 Exception 参数,继承自 ArgumentException 或某种组合。

编辑:
在 VS 2010 SP1 中,我也没有得到这个智能提示。我会浏览你的扩展,也许会寻找关于它们的文档。如果它们是开源的,您可能能够了解它是如何实现的。

于 2012-05-14T02:48:56.837 回答
-1

公开课形式1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    connect()

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    OpenFileDialog1.Filter = "image file(*.jpg *.bmp *.png)|*.jpg; *.bmp; *.png| all files (*.*)|*.*"
    If OpenFileDialog1.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
        PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)
    End If
End Sub

Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
    If OpenFileDialog1.FileName <> Nothing Or OpenFileDialog1.FileName <> "" Then
        txtname.Text = OpenFileDialog1.FileName.Substring( _
        OpenFileDialog1.FileName.LastIndexOf("\") + 1, _
        (OpenFileDialog1.FileName.LastIndexOf(".", 0) - (OpenFileDialog1.FileName.LastIndexOf("\") + 1)))

    End If
End Sub

结束类

于 2014-07-06T02:57:09.857 回答
-2

很明显,您正在查看您刚刚在决定抛出它的条件中使用的变量。

于 2012-05-14T02:41:15.557 回答