6

メソッドで使用indexersすることは可能ですか。extension

例えば。あくまでも例として考えてください。

    public static object SelectedValue(this DataGridView dgv, string ColumnName)
    {            
        return dgv.SelectedRows[0].Cells[ColumnName].Value;
    }

編集

  1. 利用方法mygrid.SelectedValue("mycol")

  2. mygrid.SelectedValue["mycol"]上のものではなく、インデクサーとして使用する方法。

  3. このような使い方も可能ですか?mygrid.SelectedValue["mycol"](out somevalue);

この種の値を取得する構文は何ですか。簡単な例やリンクはどれでも機能します。

4

2 に答える 2

4

さて、ここで 2 つの問題があります。

  • C# は (概して) 名前付きインデクサーをサポートしていません1
  • C# は拡張プロパティをサポートしていないためSelectedValue、代わりにインデックス可能なものを返すプロパティを作成することはできません

いいえ、そこで指定した構文は機能しません。これを機能させることができます:

mygrid.SelectedValue()["mycol"]

しかし、それは少し醜いです。私があなただったら、メソッド形式に固執します。


1 C# 4 は、COM オブジェクトでの名前付きインデクサーの呼び出しをサポートしています。

于 2010-06-25T10:47:12.410 に答える
0

の使用法と意図を明確にしてみましょうExtension Method

を検討してくださいExtension Method

public static bool IsNullOrEmpty(this string source)
{
    return source == null || source == string.Empty;
}

stringこれでクラスを拡張しますExtension Method

var myString = "Hello World";
Assert.AreEqual(myString.IsNullOrEmpty(), false);

これは、コンパイル時に .NET が行うことです。

public static bool IsNullOrEmpty(string source)
{
    return source == null || source == string.Empty;
}

私たちの古い学校を使用して

var myString = "Hello World";
Assert.AreEqual(IsNullOrEmpty(myString), false);

拡張メソッドは、私たちが慣れ親しんできたことの視覚化に他なりません。

まあ、インデクサーを拡張することは可能かもしれませんが、Microsoft はそれについて考えていませんでした。

于 2010-06-25T11:01:01.310 に答える