2

私が書いているとき:

throw new ArgumentOutOfRangeException("")

引用符の間にキャレットを置き、Ctrl+Space を押してインテリセンスを開くと、実際に何かが実行されます!

私を驚かせる奇妙で美しいことは、メソッドから実際にパラメーター名を提案することです。

スクリーンショット

誰かがそれを達成する方法を説明してもらえますか?

このようなレベルでカスタム インテリセンスを追加するにはどうすればよいですか?

更新: 一部の人が指摘したように、このインテリセンスは正常にポップアップしません。

私はReSharper 6.1を使用しており、そのインテリセンスが ReSharper > オプション > インテリセンス > 自動ポップアップ > [C#] 文字列リテラルでポップアップするかどうかを制御できます。

それでも、そのようなインテリセンスを自分で作成する方法を知りたいです。

4

6 に答える 6

4

この 記事をご覧 ください. さらに、あなたの質問によく似た別のスタック オーバーフローの質問があり、ヒントも得られる可能性があります。

具体的に実装する方法はわかりませんが、最初にプロジェクトをビルドする必要なく、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 にプラグインして独自のプラグインを作成する場合は、手間はかかりませんが、それでもかなり面倒です。

ただし、文字列パラメーターを呼び出し元メソッドの引数の 1 つの名前にする必要がある独自のメソッドを書きたいだけの場合、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 にハード コードされたものだと思います。推測では、ArgumentException から継承する String paramName と呼ばれる Exception パラメータ、またはいくつかの組み合わせを使用して遊んでみます。

編集:
VS 2010 SP1 では、このインテリセンス プロンプトも表示されません。私はあなたの拡張機能を調べて、それらに関するドキュメントを探すかもし​​れません。それらがオープンソースである場合、それがどのように実装されているかを知ることができるかもしれません.

于 2012-05-14T02:48:56.837 に答える
-1

パブリック クラス 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

クラス終了

于 2014-07-06T02:57:09.857 に答える
-2

それをスローすることを決定した条件で使用した変数を見ているのは明らかです。

于 2012-05-14T02:41:15.557 に答える