11

拡張メソッドを使用してインデクサーを拡張することは可能ですか? 次のようなヘッダー テキストを使用してDataGridViewCell、指定されたセルの値を取得できるようにしたいと考えています。DataGridViewRow

object o = row["HeaderText"]; 

私はこのコードを持っています

public static class Ext
{
    public static object Cells(this DataGridViewRow r, string header)
    {
        foreach (DataGridViewCell c in r.Cells)
        {
            if (c.OwningColumn.HeaderText == header)
            {
                return c.Value;
            }
        }
        return null;
    }
}

同様のインデクサーが必要です。ありがとう。

4

6 に答える 6

17

インデクサーは実際にはプロパティであり、拡張プロパティは C# には存在しません。したがって、これはあなたが望む方法で行うことはできません。

このブログ投稿を参照して、このテーマの背景と、その機能が考慮されたものの、最終的に C# 3.0 から除外された理由についての説明を参照してください。

于 2011-09-02T16:06:52.250 に答える
6

いいえ、そうではありません。拡張メソッドは、静的メソッド呼び出しのシンタックス シュガーにすぎません。インデクサーはプロパティです。

やっている

object o = new object();
o.ExtensionMethod();

と同等です

object o = new object();
Extensions.ExtensionMethod(o);

拡張メソッドはクラスを変更しません。静的メソッドを呼び出すためのより単純なインターフェイスを提供するだけです。

于 2011-09-02T16:06:58.417 に答える
2

残念だけど違う。これは事実上、サポートされていない「拡張プロパティ」になります。現在のコードのように、メソッドとして持っている必要があります。

拡張プロパティは Connect で何度もリクエストされていますが、言語には含まれていないことに注意し ください

于 2011-09-02T16:06:50.537 に答える
1

いいえ、これは不可能です。拡張メソッドはメソッドのみに限定されます。プロパティ、インデクサー、またはコンストラクターを提供できません

于 2011-09-02T16:06:55.700 に答える
1

いいえ、拡張メソッドを使用して、インデクサーなどの演算子を拡張することはできません。

于 2011-09-02T16:06:27.277 に答える
0

拡張プロパティの回避策として、リフレクション ベースのオブジェクト インデクサー コードを使用して、オブジェクトの Getter および Setter 拡張メソッドを実装できます。

于 2012-11-14T08:38:49.423 に答える