繁体   English   中英

C#ArgumentOutOfRangeException参数intellisense

[英]C# ArgumentOutOfRangeException parameter intellisense

当我写作时:

throw new ArgumentOutOfRangeException("")

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

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

截图

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

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

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

我正在使用ReSharper 6.1 ,我可以在ReSharper> Options> Intellisense> Autopopup> [C#]字符串文字中控制是否会弹出intellisense。

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

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

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

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

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

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

要编写自己的智能感知需要花费很多精力。 你基本上要复制Jetbrains的人们花费了大量资源来使Resharper成为现实。

如果你想插入Resharper的API来创建你自己的插件 ,它需要更少的努力,但它仍然是相当繁琐的。

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

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

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

公共类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

结束班

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM