C#ArgumentOutOfRangeException参数intellisense

时间:2012-05-14 02:37:12

标签: c# parameters resharper intellisense outofrangeexception

当我写作时:

throw new ArgumentOutOfRangeException("")

将插入符号放在引号之间,然后按Ctrl + Space打开intellisense实际上做了一些事情!

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

ScreenShot

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

如何在此级别添加自定义智能感知?

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

我正在使用ReSharper 6.1,我可以控制是否会在ReSharper中弹出智能感知>选项> Intellisense> Autopopup> [C#]在字符串文字中。

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

6 个答案:

答案 0 :(得分:4)

我认为你应该看看this article。 另外还有另外一个Stack Overflow question与你的很相似,也可能会给你一些提示。

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

答案 1 :(得分: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插入到create your own plugin,则需要花费更少的精力,但它仍然非常繁琐。

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

答案 2 :(得分:3)

答案 3 :(得分:0)

我在Reflector中看不到ArgumentOutOfRangeException或ArgumentException类型的任何特殊内容,所以我猜它是硬编码到Visual Studio中的东西。在猜测中,我会使用一个名为String paramName的Exception参数,继承自ArgumentException或某种组合。

编辑:
在VS 2010 SP1中,我也没有得到这个智能感知提示。我会查看您的扩展,并可能查找有关它们的文档。如果它们是开源的,您可以了解它是如何实现的。

答案 4 :(得分:-1)

Public Class Form1

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

结束班

答案 5 :(得分:-2)

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